|
18957
|
813
|
23
|
2026-05-11T12:04:32.942832+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778501072942_m2.jpg...
|
Code
|
Review rate limit handli… — app
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 22 pending changes
22
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Testing
Claude Code
EXPLORER
EXPLORER
Explorer Section: app
Explorer Section: app
APP
AjReports
Audio
AutomatedReports
Calendar
Crm
Delete
Hubspot
Traits
FetchMergedObjectsPageJob.php
HubspotAppUninstallJob.php
ImportAccountBatch.php
ImportBatchJobTrait.php
ImportContactBatch.php
ImportOpportunityBatch.php
ProcessHubspotWebhookEventsTrait.php
ProcessInternalWebhookEventsJob.php
ProcessMergedObjectJob.php
ProcessWebhookEventsJob.php
UpdateDealWebhookSubscriptionJob.php
Salesforce
AutologDelayedToCrm.php
CheckAndRetryRemoteMatch.php
CreateFollowupActivity.php
CreateNotes.php
MatchActivitiesToNewOpportunity.php
MatchActivityCrmData.php
M
NoteObject.php
SaveActivity.php
SaveTranscription.php
SetupLayout.php
SyncActivity.php
SyncFieldMetadata.php
SyncHubspotObjects.php
SyncLeads.php
SyncObjects.php
SyncOpportunitiesJob.php
SyncOpportunity.php
SyncProfileMetadata.php
SyncTeamFieldsJob.php
SyncTeamMetadata.php
UpdateOpportunitySpecifications.php
UpdateStage.php...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 22 pending changes","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"22","depth":22,"bounds":{"left":0.007978723,"top":0.1452514,"width":0.0039893617,"height":0.008778931},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.007978723,"top":0.14604948,"width":0.0023271276,"height":0.007980846}},{"char_start":1,"char_count":1,"bounds":{"left":0.009973404,"top":0.14604948,"width":0.0019946808,"height":0.007980846}}],"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Testing","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.28731045,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: app","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: app","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.0076462766,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"APP","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.0076462766,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.024933511,"top":0.0933759,"width":0.005319149,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"AjReports","depth":27,"bounds":{"left":0.03125,"top":0.0933759,"width":0.019614361,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.0933759,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.034242023,"top":0.0933759,"width":0.01662234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.024933511,"top":0.110135674,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Audio","depth":27,"bounds":{"left":0.03125,"top":0.110135674,"width":0.011635638,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.11093376,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.034242023,"top":0.11093376,"width":0.008643617,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.024933511,"top":0.12769353,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"AutomatedReports","depth":27,"bounds":{"left":0.03125,"top":0.12769353,"width":0.03756649,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.12849163,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":15,"bounds":{"left":0.034242023,"top":0.12849163,"width":0.034906916,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.024933511,"top":0.1452514,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Calendar","depth":27,"bounds":{"left":0.03125,"top":0.1452514,"width":0.017952127,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.14604948,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.034242023,"top":0.14604948,"width":0.015292553,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.024933511,"top":0.16280925,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Crm","depth":27,"bounds":{"left":0.03125,"top":0.16280925,"width":0.00831117,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.16360734,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.027593086,"top":0.18036711,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Delete","depth":27,"bounds":{"left":0.033909574,"top":0.18036711,"width":0.012965426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.1811652,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.03723404,"top":0.1811652,"width":0.009640957,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.027593086,"top":0.19792499,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Hubspot","depth":27,"bounds":{"left":0.033909574,"top":0.19792499,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.19872306,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.03723404,"top":0.19872306,"width":0.013962766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.03025266,"top":0.21548285,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Traits","depth":27,"bounds":{"left":0.03656915,"top":0.21548285,"width":0.011303191,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03656915,"top":0.21628092,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.038896278,"top":0.21628092,"width":0.008976064,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.02925532,"top":0.23144454,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"FetchMergedObjectsPageJob.php","depth":27,"bounds":{"left":0.03656915,"top":0.2330407,"width":0.06881649,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03656915,"top":0.23383878,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":28,"bounds":{"left":0.039228722,"top":0.23383878,"width":0.06615692,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.02925532,"top":0.2490024,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"HubspotAppUninstallJob.php","depth":27,"bounds":{"left":0.03656915,"top":0.25059855,"width":0.059175532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03656915,"top":0.25139666,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.039893616,"top":0.25139666,"width":0.055851065,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.02925532,"top":0.26656026,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ImportAccountBatch.php","depth":27,"bounds":{"left":0.03656915,"top":0.26815644,"width":0.050531916,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03656915,"top":0.26895452,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":21,"bounds":{"left":0.037898935,"top":0.26895452,"width":0.04920213,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.02925532,"top":0.28411812,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ImportBatchJobTrait.php","depth":27,"bounds":{"left":0.03656915,"top":0.2857143,"width":0.049867023,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03656915,"top":0.28651237,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":22,"bounds":{"left":0.037898935,"top":0.28651237,"width":0.048537236,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.02925532,"top":0.30167598,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ImportContactBatch.php","depth":27,"bounds":{"left":0.03656915,"top":0.30327216,"width":0.049867023,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03656915,"top":0.30407023,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":21,"bounds":{"left":0.037898935,"top":0.30407023,"width":0.048537236,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.02925532,"top":0.31923383,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ImportOpportunityBatch.php","depth":27,"bounds":{"left":0.03656915,"top":0.32083002,"width":0.057845745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03656915,"top":0.3216281,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.037898935,"top":0.3216281,"width":0.056848403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.02925532,"top":0.3367917,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ProcessHubspotWebhookEventsTrait.php","depth":27,"bounds":{"left":0.03656915,"top":0.33838788,"width":0.077792555,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03656915,"top":0.33918595,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":35,"bounds":{"left":0.039228722,"top":0.33918595,"width":0.080784574,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.02925532,"top":0.35434955,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ProcessInternalWebhookEventsJob.php","depth":27,"bounds":{"left":0.03656915,"top":0.35594574,"width":0.078457445,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03656915,"top":0.3567438,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":34,"bounds":{"left":0.039228722,"top":0.3567438,"width":0.0774601,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.02925532,"top":0.3719074,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ProcessMergedObjectJob.php","depth":27,"bounds":{"left":0.03656915,"top":0.3735036,"width":0.061170213,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03656915,"top":0.37430167,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.039228722,"top":0.37430167,"width":0.058843084,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.02925532,"top":0.38946527,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ProcessWebhookEventsJob.php","depth":27,"bounds":{"left":0.03656915,"top":0.39106146,"width":0.06482713,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03656915,"top":0.39185953,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":26,"bounds":{"left":0.039228722,"top":0.39185953,"width":0.06216755,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.02925532,"top":0.40702313,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"UpdateDealWebhookSubscriptionJob.php","depth":27,"bounds":{"left":0.03656915,"top":0.4086193,"width":0.076130316,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03656915,"top":0.4094174,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":35,"bounds":{"left":0.039893616,"top":0.4094174,"width":0.08111702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.027593086,"top":0.42617717,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Salesforce","depth":27,"bounds":{"left":0.033909574,"top":0.42617717,"width":0.021276595,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.42697525,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.03656915,"top":0.42697525,"width":0.01861702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.44213888,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"AutologDelayedToCrm.php","depth":27,"bounds":{"left":0.033909574,"top":0.44373503,"width":0.053856384,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.4445331,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":22,"bounds":{"left":0.036901597,"top":0.4445331,"width":0.05119681,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.45969674,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"CheckAndRetryRemoteMatch.php","depth":27,"bounds":{"left":0.033909574,"top":0.4612929,"width":0.068484046,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.46209097,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":27,"bounds":{"left":0.036901597,"top":0.46209097,"width":0.06549202,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.4772546,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"CreateFollowupActivity.php","depth":27,"bounds":{"left":0.033909574,"top":0.47885075,"width":0.054853722,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.47964883,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.036901597,"top":0.47964883,"width":0.051861703,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.49481246,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"CreateNotes.php","depth":27,"bounds":{"left":0.033909574,"top":0.4964086,"width":0.034242023,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.49720672,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.036901597,"top":0.49720672,"width":0.03125,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.5123703,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"MatchActivitiesToNewOpportunity.php","depth":27,"bounds":{"left":0.033909574,"top":0.5139665,"width":0.07712766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.51476455,"width":0.0039893617,"height":0.011971269}},{"char_start":1,"char_count":34,"bounds":{"left":0.037898935,"top":0.51476455,"width":0.07347074,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.52992815,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"MatchActivityCrmData.php","depth":27,"bounds":{"left":0.033909574,"top":0.53152436,"width":0.054521278,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.5323224,"width":0.0039893617,"height":0.011971269}},{"char_start":1,"char_count":23,"bounds":{"left":0.037898935,"top":0.5323224,"width":0.050531916,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.10638298,"top":0.5323224,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.547486,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"NoteObject.php","depth":27,"bounds":{"left":0.033909574,"top":0.5490822,"width":0.031914894,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.54988027,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.03723404,"top":0.54988027,"width":0.028922873,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.56504387,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SaveActivity.php","depth":27,"bounds":{"left":0.033909574,"top":0.5666401,"width":0.03324468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.5674381,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":15,"bounds":{"left":0.03656915,"top":0.5674381,"width":0.030585106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.5826017,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SaveTranscription.php","depth":27,"bounds":{"left":0.033909574,"top":0.58419794,"width":0.04454787,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.584996,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":20,"bounds":{"left":0.03656915,"top":0.584996,"width":0.042220745,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.60015965,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SetupLayout.php","depth":27,"bounds":{"left":0.033909574,"top":0.6017558,"width":0.034242023,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.60255384,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.03656915,"top":0.60255384,"width":0.031914894,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.6177175,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SyncActivity.php","depth":27,"bounds":{"left":0.033909574,"top":0.61931366,"width":0.03357713,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.6201117,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":15,"bounds":{"left":0.03656915,"top":0.6201117,"width":0.030917553,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.63527536,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SyncFieldMetadata.php","depth":27,"bounds":{"left":0.033909574,"top":0.6368715,"width":0.047539894,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.63766956,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":20,"bounds":{"left":0.03656915,"top":0.63766956,"width":0.04488032,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.6528332,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SyncHubspotObjects.php","depth":27,"bounds":{"left":0.033909574,"top":0.6544294,"width":0.051861703,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.6552275,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":21,"bounds":{"left":0.03656915,"top":0.6552275,"width":0.04920213,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.6703911,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SyncLeads.php","depth":27,"bounds":{"left":0.033909574,"top":0.67198724,"width":0.030917553,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.67278534,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.03656915,"top":0.67278534,"width":0.02825798,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.68794894,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SyncObjects.php","depth":27,"bounds":{"left":0.033909574,"top":0.6895451,"width":0.034574468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.6903432,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.03656915,"top":0.6903432,"width":0.031914894,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.7055068,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SyncOpportunitiesJob.php","depth":27,"bounds":{"left":0.033909574,"top":0.70710295,"width":0.053856384,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.70790106,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":23,"bounds":{"left":0.03656915,"top":0.70790106,"width":0.05119681,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.72306466,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SyncOpportunity.php","depth":27,"bounds":{"left":0.033909574,"top":0.7246608,"width":0.04288564,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.7254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":18,"bounds":{"left":0.03656915,"top":0.7254589,"width":0.040226065,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.7406225,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SyncProfileMetadata.php","depth":27,"bounds":{"left":0.033909574,"top":0.7422187,"width":0.05086436,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.7430168,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":22,"bounds":{"left":0.03656915,"top":0.7430168,"width":0.048204787,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.7581804,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SyncTeamFieldsJob.php","depth":27,"bounds":{"left":0.033909574,"top":0.75977653,"width":0.04886968,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.77573824,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SyncTeamMetadata.php","depth":27,"bounds":{"left":0.033909574,"top":0.7773344,"width":0.048537236,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.7932961,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"UpdateOpportunitySpecifications.php","depth":27,"bounds":{"left":0.033909574,"top":0.79489225,"width":0.076130316,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.81085396,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"UpdateStage.php","depth":27,"bounds":{"left":0.033909574,"top":0.8124501,"width":0.03523936,"height":0.011971269},"on_screen":true,"role_description":"text"}]...
|
8686667812786640219
|
9185263296254779722
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 22 pending changes
22
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Testing
Claude Code
EXPLORER
EXPLORER
Explorer Section: app
Explorer Section: app
APP
AjReports
Audio
AutomatedReports
Calendar
Crm
Delete
Hubspot
Traits
FetchMergedObjectsPageJob.php
HubspotAppUninstallJob.php
ImportAccountBatch.php
ImportBatchJobTrait.php
ImportContactBatch.php
ImportOpportunityBatch.php
ProcessHubspotWebhookEventsTrait.php
ProcessInternalWebhookEventsJob.php
ProcessMergedObjectJob.php
ProcessWebhookEventsJob.php
UpdateDealWebhookSubscriptionJob.php
Salesforce
AutologDelayedToCrm.php
CheckAndRetryRemoteMatch.php
CreateFollowupActivity.php
CreateNotes.php
MatchActivitiesToNewOpportunity.php
MatchActivityCrmData.php
M
NoteObject.php
SaveActivity.php
SaveTranscription.php
SetupLayout.php
SyncActivity.php
SyncFieldMetadata.php
SyncHubspotObjects.php
SyncLeads.php
SyncObjects.php
SyncOpportunitiesJob.php
SyncOpportunity.php
SyncProfileMetadata.php
SyncTeamFieldsJob.php
SyncTeamMetadata.php
UpdateOpportunitySpecifications.php
UpdateStage.php...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
19724
|
847
|
2
|
2026-05-11T13:28:14.523503+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778506094523_m2.jpg...
|
Firefox
|
Pipelines - jiminny/app — Work
|
True
|
app.circleci.com/pipelines/github/jiminny/app
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
New Tab
Jy 20820 es reindex stream model h New Tab
New Tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Close tab...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.3570479,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.37034574,"top":0.06304868,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"bounds":{"left":0.3570479,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":5,"bounds":{"left":0.37034574,"top":0.09577015,"width":0.16888298,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":4,"bounds":{"left":0.3570479,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":5,"bounds":{"left":0.37034574,"top":0.12849163,"width":0.16140293,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"bounds":{"left":0.3570479,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"bounds":{"left":0.37034574,"top":0.16121309,"width":0.4644282,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.3570479,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.37034574,"top":0.19393456,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.3570479,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.37034574,"top":0.22665602,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.42436835,"top":0.22266561,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
8686435233019143433
|
-2912409957801282940
|
visual_change
|
accessibility
|
NULL
|
New Tab
New Tab
Jy 20820 es reindex stream model h New Tab
New Tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Close tab...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
17671
|
776
|
4
|
2026-05-11T10:28:29.052362+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778495309052_m1.jpg...
|
Firefox
|
Screenpipe — Archive — Personal
|
True
|
app.screenpipe.lakylak.xyz
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
Monitor
Jump to
--
:
--
Go
APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN
−
1×
+
Follow
Follow
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
14:30
15:00
15:30
16:00
16:30
17:00
17:30
18:00
18:30
19:00
19:30
20:00
20:30
21:00
21:30
7 May 15:12 · iTerm2
⏮ 30s
◀ 10s
⏸ Pause
10s ▶
30s ⏭
15:12
iTerm2
Firefox
CleanShot X
Finder
QuickTime Player
PhpStorm
Music
Control Centre
Claude
Slack
Alfred
Raycast
System Information...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.05590278,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.078819446,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.10208333,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.12534723,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.14861111,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Screenpipe [archive.db · 12323.6MB]","depth":7,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screenpipe","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[archive.db · 12323.6MB]","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Activity","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Audio","depth":7,"on_screen":true,"help_text":"No audio data in this database","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Work Report","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Timetable","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Summary","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Date","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"07","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Monitor","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jump to","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Go","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"−","depth":9,"on_screen":true,"help_text":"Zoom out","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1×","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"+","depth":9,"on_screen":true,"help_text":"Zoom in","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Follow","depth":10,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Follow","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7 May 15:12 · iTerm2","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏮ 30s","depth":9,"on_screen":true,"help_text":"Ctrl+←","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"◀ 10s","depth":9,"on_screen":true,"help_text":"←","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"⏸ Pause","depth":9,"on_screen":true,"help_text":"Space","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"10s ▶","depth":9,"on_screen":true,"help_text":"→","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"30s ⏭","depth":9,"on_screen":true,"help_text":"Ctrl+→","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"15:12","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"iTerm2","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CleanShot X","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Finder","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QuickTime Player","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PhpStorm","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Music","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Control Centre","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Claude","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Slack","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Alfred","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Raycast","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"System Information","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8684526579509677027
|
3986165236944961689
|
idle
|
accessibility
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
Monitor
Jump to
--
:
--
Go
APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN
−
1×
+
Follow
Follow
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
14:30
15:00
15:30
16:00
16:30
17:00
17:30
18:00
18:30
19:00
19:30
20:00
20:30
21:00
21:30
7 May 15:12 · iTerm2
⏮ 30s
◀ 10s
⏸ Pause
10s ▶
30s ⏭
15:12
iTerm2
Firefox
CleanShot X
Finder
QuickTime Player
PhpStorm
Music
Control Centre
Claude
Slack
Alfred
Raycast
System Information...
|
17666
|
NULL
|
NULL
|
NULL
|
|
18353
|
792
|
34
|
2026-05-11T11:12:49.492764+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497969492_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
67
3
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Illuminate\Support\Facades\Redis;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
$message = strtolower($e->getMessage());
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (RateLimitException $e) {
// throw $e;
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
54
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ AsyncU...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Illuminate\\Support\\Facades\\Redis;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (429) from HubSpot by translating it\n * into a RateLimitException carrying retry_after.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n $message = strtolower($e->getMessage());\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n });\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (RateLimitException $e) {\n// throw $e;\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Illuminate\\Support\\Facades\\Redis;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (429) from HubSpot by translating it\n * into a RateLimitException carrying retry_after.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n $message = strtolower($e->getMessage());\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n });\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (RateLimitException $e) {\n// throw $e;\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"429","depth":4,"on_screen":true,"value":"429","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Preserve case","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1/4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter Search Results","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Window, Multiple Cursors","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Click to highlight","depth":4,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"54","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-11 11:08:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","depth":4,"on_screen":true,"value":"[2026-05-11 11:08:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"}]...
|
8682107944457975172
|
-2556523036834395804
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
67
3
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Illuminate\Support\Facades\Redis;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
$message = strtolower($e->getMessage());
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (RateLimitException $e) {
// throw $e;
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
54
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ AsyncU...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18354
|
793
|
31
|
2026-05-11T11:12:49.513742+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497969513_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
67
3
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Illuminate\Support\Facades\Redis;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
$message = strtolower($e->getMessage());
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (RateLimitException $e) {
// throw $e;
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
54
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ AsyncU...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.82413566,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.8394282,"top":0.019952115,"width":0.076130316,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.49800533,"top":0.17478053,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.50731385,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"bounds":{"left":0.51728725,"top":0.17478053,"width":0.009973404,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.52925533,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.53889626,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5462101,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Illuminate\\Support\\Facades\\Redis;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (429) from HubSpot by translating it\n * into a RateLimitException carrying retry_after.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n $message = strtolower($e->getMessage());\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n });\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (RateLimitException $e) {\n// throw $e;\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Illuminate\\Support\\Facades\\Redis;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (429) from HubSpot by translating it\n * into a RateLimitException carrying retry_after.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n $message = strtolower($e->getMessage());\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\n });\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (RateLimitException $e) {\n// throw $e;\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"bounds":{"left":0.5575133,"top":0.08060654,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.57014626,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"429","depth":4,"bounds":{"left":0.58111703,"top":0.07980846,"width":0.077792555,"height":0.015961692},"on_screen":true,"value":"429","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.66788566,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"bounds":{"left":0.67785907,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"bounds":{"left":0.68650264,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"bounds":{"left":0.69514626,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Preserve case","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1/4","depth":4,"bounds":{"left":0.7087766,"top":0.079010375,"width":0.025598405,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.734375,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.7430186,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter Search Results","depth":4,"bounds":{"left":0.75166225,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Window, Multiple Cursors","depth":4,"bounds":{"left":0.7603058,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Click to highlight","depth":4,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.97539896,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"54","depth":4,"bounds":{"left":0.96210104,"top":0.10933759,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.10774142,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.10774142,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-11 11:08:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","depth":4,"bounds":{"left":0.4268617,"top":0.10614525,"width":0.5731383,"height":0.89385474},"on_screen":true,"value":"[2026-05-11 11:08:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8682107944457975172
|
-2556523036834395804
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
67
3
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Illuminate\Support\Facades\Redis;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
$message = strtolower($e->getMessage());
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (RateLimitException $e) {
// throw $e;
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
54
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ AsyncU...
|
18352
|
NULL
|
NULL
|
NULL
|
|
8287
|
365
|
21
|
2026-05-08T10:18:54.650855+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778235534650_m1.jpg...
|
Firefox
|
AI Features | Datadog — Work
|
True
|
app.datadoghq.com/dashboard/5id-9sv-qmg/ai-feature app.datadoghq.com/dashboard/5id-9sv-qmg/ai-features?fromUser=false&refresh_mode=paused&tile_focus=5187680469773418&from_ts=1772316000000&to_ts=1777475592447&live=false...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 3 Q2 - Platform Team - Scrum Board Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app
Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app
Illuminate\Queue\MaxAttemptsExceededException: Jiminny\Jobs\Activity\DeleteTeamChurnData has been attempted too many times. — jiminny — app
Illuminate\Queue\MaxAttemptsExceededException: Jiminny\Jobs\Activity\DeleteTeamChurnData has been attempted too many times. — jiminny — app
JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app
JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app
Userpilot | Ask Jiminny Report Generated
Userpilot | Ask Jiminny Report Generated
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
Problem loading page
Problem loading page
Search the CRM - HubSpot docs
Search the CRM - HubSpot docs
Jiminny
Jiminny
New Tab
New Tab
New Tab
New Tab
Dashboards | Datadog
Dashboards | Datadog
AI Features | Datadog
AI Features | Datadog
Jy 20493 smart instant nudge pre filtering by nikolaybiaivanov · Pull Request #12053 · jiminny/app
Jy 20493 smart instant nudge pre filtering by nikolaybiaivanov · Pull Request #12053 · jiminny/app
AI Features | Datadog
AI Features | Datadog
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 main content
Skip to main content
Home
Hide menu
Minimize menu
Go to…
Go to…
Recent
Bits AI
Bits AI
Dashboards
Dashboards
Monitoring
Monitoring
Incident Response
Incident Response
Automation
Automation
Infrastructure
Infrastructure
Cloud Cost
Cloud Cost
APM
APM
Digital Experience
Digital Experience
Software Delivery
Software Delivery
Security
Security
Data Observability
Data Observability
AI Observability
AI Observability
Errors
Errors
Metrics
Metrics
Logs
Logs
Integrations
Integrations
Profile
[EMAIL]
Jiminny, Inc.
Support
Support
NEW Help
NEW
Help
Favorite this dashboard
AI Features
AI Features
Edit dashboard title, description & tags
Show sharing menu
Show sharing menu
Show Overlays
Open dashboard options
Keyboard Shortcuts
Keyboard Shortcuts
Copy widget
Hover over widget
⌘
+
C
Lock/unlock time cursor
L
Show/hide legend inspector
H
or
`
Collapse hovered group
Hover
+
C
Open hovered group
Hover
+
O
Open/Collapse all groups
Opt
+
Click
Open full screen view
Double-click on widget header
Double-Click
Toggle TV mode
F
Open/close shortcut panel
Shift
+
?
Open/close anomaly insights
⌘
+
I
Request Edit Access
Add template variable
Show help
2mo
Mar 1, 12:00 am – Apr 29, 6:13 pm
Pin time
UTC+03:00
Step Back
Play
Step Forward
Zoom Out Time Range
Copyright Datadog, Inc.
2026
Version:
35.112140861
Master Subscription Agreement
Master Subscription Agreement
Privacy Policy
Privacy Policy
Cookie Policy
Cookie Policy
Datadog Status : All Systems Operational
Datadog Status
:
All Systems Operational...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"on_screen":true,"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,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Illuminate\\Queue\\MaxAttemptsExceededException: Jiminny\\Jobs\\Activity\\DeleteTeamChurnData has been attempted too many times. — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Illuminate\\Queue\\MaxAttemptsExceededException: Jiminny\\Jobs\\Activity\\DeleteTeamChurnData has been attempted too many times. — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Userpilot | Ask Jiminny Report Generated","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Userpilot | Ask Jiminny Report Generated","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Problem loading page","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Problem loading page","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Search the CRM - HubSpot docs","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search the CRM - HubSpot docs","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Dashboards | Datadog","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dashboards | Datadog","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"AI Features | Datadog","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AI Features | Datadog","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20493 smart instant nudge pre filtering by nikolaybiaivanov · Pull Request #12053 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20493 smart instant nudge pre filtering by nikolaybiaivanov · Pull Request #12053 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"AI Features | Datadog","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"AI Features | Datadog","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"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.0013888889,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Bookmarks","depth":5,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Bookmarks","depth":6,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextField","text":"Search bookmarks","depth":7,"on_screen":true,"help_text":"","role_description":"search text field","subrole":"AXSearchField","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to main content","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Home","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Hide menu","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Minimize menu","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Go to…","depth":9,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Go to…","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Bits AI","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Bits AI","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboards","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dashboards","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Monitoring","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Monitoring","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Incident Response","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Incident Response","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Automation","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Automation","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Infrastructure","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Infrastructure","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Cloud Cost","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Cloud Cost","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"APM","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"APM","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Digital Experience","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Digital Experience","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Software Delivery","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Software Delivery","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Data Observability","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Data Observability","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"AI Observability","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AI Observability","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Errors","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Errors","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Metrics","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Metrics","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Logs","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Logs","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Integrations","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Integrations","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Profile","depth":11,"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":15,"bounds":{"left":0.32152778,"top":0.0,"width":0.11354167,"height":0.02},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny, Inc.","depth":16,"bounds":{"left":0.32152778,"top":0.0,"width":0.043402776,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Support","depth":8,"bounds":{"left":0.2923611,"top":0.0,"width":0.055555556,"height":0.055},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Support","depth":10,"bounds":{"left":0.30555555,"top":0.0,"width":0.029166667,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"NEW Help","depth":8,"bounds":{"left":0.34791666,"top":0.0,"width":0.055555556,"height":0.055},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"NEW","depth":10,"bounds":{"left":0.36770833,"top":0.0,"width":0.015972223,"height":0.015555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Help","depth":10,"bounds":{"left":0.3673611,"top":0.0,"width":0.016666668,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Favorite this dashboard","depth":11,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"AI Features","depth":12,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AI Features","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit dashboard title, description & tags","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show sharing menu","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show sharing menu","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show Overlays","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open dashboard options","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Keyboard Shortcuts","depth":11,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keyboard Shortcuts","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Copy widget","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hover over widget","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"⌘","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"C","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lock/unlock time cursor","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"L","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Show/hide legend inspector","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"H","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"`","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Collapse hovered group","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hover","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"C","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open hovered group","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hover","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"O","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open/Collapse all groups","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opt","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Click","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open full screen view","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Double-click on widget header","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Double-Click","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Toggle TV mode","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"F","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open/close shortcut panel","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shift","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"?","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open/close anomaly insights","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"⌘","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Request Edit Access","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add template variable","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show help","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2mo","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Mar 1, 12:00 am – Apr 29, 6:13 pm","depth":10,"on_screen":true,"value":"Mar 1, 12:00 am – Apr 29, 6:13 pm","help_text":"","placeholder":" ","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pin time","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UTC+03:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Step Back","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Play","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Step Forward","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Zoom Out Time Range","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Copyright Datadog, Inc.","depth":11,"bounds":{"left":0.68333334,"top":0.0,"width":0.08715278,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":11,"bounds":{"left":0.7704861,"top":0.0,"width":0.017708333,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Version:","depth":12,"bounds":{"left":0.79444444,"top":0.0,"width":0.029166667,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"35.112140861","depth":11,"bounds":{"left":0.7951389,"top":0.0,"width":0.050347224,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Master Subscription Agreement","depth":11,"bounds":{"left":0.8527778,"top":0.0,"width":0.11388889,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Master Subscription Agreement","depth":12,"bounds":{"left":0.8527778,"top":0.0,"width":0.11388889,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Privacy Policy","depth":11,"bounds":{"left":0.9739583,"top":0.0,"width":0.026041687,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Privacy Policy","depth":12,"bounds":{"left":0.9739583,"top":0.0,"width":0.026041687,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Cookie Policy","depth":11,"bounds":{"left":1.0,"top":0.0,"width":-0.029513836,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Cookie Policy","depth":12,"bounds":{"left":1.0,"top":0.0,"width":-0.029513836,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Datadog Status : All Systems Operational","depth":11,"bounds":{"left":1.0,"top":0.0,"width":-0.08368051,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Datadog Status","depth":12,"bounds":{"left":1.0,"top":0.0,"width":-0.08368051,"height":0.017222222},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"All Systems Operational","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8680110331470261351
|
1679430516382782914
|
click
|
accessibility
|
NULL
|
Platform Sprint 3 Q2 - Platform Team - Scrum Board Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app
Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app
Illuminate\Queue\MaxAttemptsExceededException: Jiminny\Jobs\Activity\DeleteTeamChurnData has been attempted too many times. — jiminny — app
Illuminate\Queue\MaxAttemptsExceededException: Jiminny\Jobs\Activity\DeleteTeamChurnData has been attempted too many times. — jiminny — app
JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app
JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app
Userpilot | Ask Jiminny Report Generated
Userpilot | Ask Jiminny Report Generated
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
Problem loading page
Problem loading page
Search the CRM - HubSpot docs
Search the CRM - HubSpot docs
Jiminny
Jiminny
New Tab
New Tab
New Tab
New Tab
Dashboards | Datadog
Dashboards | Datadog
AI Features | Datadog
AI Features | Datadog
Jy 20493 smart instant nudge pre filtering by nikolaybiaivanov · Pull Request #12053 · jiminny/app
Jy 20493 smart instant nudge pre filtering by nikolaybiaivanov · Pull Request #12053 · jiminny/app
AI Features | Datadog
AI Features | Datadog
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 main content
Skip to main content
Home
Hide menu
Minimize menu
Go to…
Go to…
Recent
Bits AI
Bits AI
Dashboards
Dashboards
Monitoring
Monitoring
Incident Response
Incident Response
Automation
Automation
Infrastructure
Infrastructure
Cloud Cost
Cloud Cost
APM
APM
Digital Experience
Digital Experience
Software Delivery
Software Delivery
Security
Security
Data Observability
Data Observability
AI Observability
AI Observability
Errors
Errors
Metrics
Metrics
Logs
Logs
Integrations
Integrations
Profile
[EMAIL]
Jiminny, Inc.
Support
Support
NEW Help
NEW
Help
Favorite this dashboard
AI Features
AI Features
Edit dashboard title, description & tags
Show sharing menu
Show sharing menu
Show Overlays
Open dashboard options
Keyboard Shortcuts
Keyboard Shortcuts
Copy widget
Hover over widget
⌘
+
C
Lock/unlock time cursor
L
Show/hide legend inspector
H
or
`
Collapse hovered group
Hover
+
C
Open hovered group
Hover
+
O
Open/Collapse all groups
Opt
+
Click
Open full screen view
Double-click on widget header
Double-Click
Toggle TV mode
F
Open/close shortcut panel
Shift
+
?
Open/close anomaly insights
⌘
+
I
Request Edit Access
Add template variable
Show help
2mo
Mar 1, 12:00 am – Apr 29, 6:13 pm
Pin time
UTC+03:00
Step Back
Play
Step Forward
Zoom Out Time Range
Copyright Datadog, Inc.
2026
Version:
35.112140861
Master Subscription Agreement
Master Subscription Agreement
Privacy Policy
Privacy Policy
Cookie Policy
Cookie Policy
Datadog Status : All Systems Operational
Datadog Status
:
All Systems Operational...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3401
|
128
|
10
|
2026-05-07T12:16:11.950012+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778156171950_m2.jpg...
|
iTerm2
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PostmanEditVIewWindowmelpHubSpot rate limit impl PostmanEditVIewWindowmelpHubSpot rate limit implementation strategy vcan I call it from postman 100 timesEvaluated Postman testing methods and rate limit behavior implications ›Yes, easily. Postman has a built-in Collection Runner for this.How to do it1. Save the request to a collection (right-click - Save).2. Click Run collection (the play icon next to the collection name) or open therunner from the bottom-left.3. Set Iterations: 100, Delay: O (or a small value like 50ms).4. Hit Run.You'll get a results view showing each iteration's status code response time and (ifyou click into them the headers.What you'll actually seeCince vol connrmed May=110 Tinterval=t dddd•• At Oms delay, 100 iterations: Postman pushes calls as fast as TCP allows -typically 5-10 calls/second on a normal connection. You'l likely see all 100succeed because 100 < 110 in 10 seconds, and each call's latency naturally spacesthings out. The X-HubSpot-RateLimit-Remaining header willdron from 109 →108 → 107 .…. down to maybe ~10-20 by the end, then recover as the 10-secondwindow siides torward.• To deliberatelv hit a 429: set iterations to 120+ with Oms delav. You'llsee thenret ~l0 reruirn2o0. then 2 bulrct of 42es with nol ievname :TEN SECONDIY ROLITNG• To test the search limit instead: point the request at a search endpoint (e.g.,POST /crm/v3/objects/contacts/search with a minimal body), set iterationsto 10, delay to 0. You'll trigger 429s wi / ›licyName: SECONDLY after the 5thcall within a second. Faster and cheaper to reproduce than the burst limit.Keep going in Claude CodeSwitch to Claude Code and let Claude work directiv in vour.repo, running and testing as it goes.Write a message…Opus 4. AdaptiveHubspot rate limits reference - MDUse timeZone to interpret resetsAt from the daily erCheat sheet: profiling a new portal in PostmanThree calls, in order:1. GEl /account-into/vs/details portalinto+GET /account-info/v3/api-usage/daily/privemeaningful for private apps)3. Skip search probing — the 5/sec is fixedError response shape"message": "You have reached your secondly 1:"errorType" : "RATE_LIMIT","policyName" : "SECONDLY","correlationia": "...","requestId": "..."nolncvname values.• SECONDLY - search bucket (5/sec)• TEN_SECONDLY_ROLLING - burst bucket (110/10sprivate)• DAILY — private apps daily ceilingAlways inspect policyName on 429 to know which bucback off.Other operational guidelines• Error responses must stay under 5% of total dailycertificationi• Polling endpoints: minimum interval 5 minutes.• Search querv: max 3.000 chars, max 18 filters acroresults per query.• Ratch enânoints. 1in to 100 records ner call regdlaXx Hubspot vQ SearchYour team is now on the Free plan with 1 admin. You retain editing access and other members are read-only. View team permissions to see who can edit, or upgrade to restore collaborationIteration run Search HSCOLLECTIONSe.9. An error occurred.29; successtul operationIteration run Search HS> DEL Archive• You M0 0uU1 O 03:15 PM. May 07. 2026>PATCH Update> GET List>post CreateHelp people understand your collection by adding a description. *; Write with AlPost Filter. Sort. and Search CRM Obiects29: successtul operationgo. An error occurred.› CRM Owners> CRM Pioelines>Dealsv Engagements> O OLD ENGAGEMENTSGET list meetingsPOST search modified companiesPOST search taskseroadnai> POST search callscet list callsPOST meetinas scheduledGET get meetingPOST aet link to task>Post create contact with association> Hubsoot~ Iteration run HS~ GET Read Copycf. An error occurred.eg. successful onerationPosT searcia,contact by email CopyIteration run Search HSCollection is emptyAdd a reauest or folder to structure vour API* Add requestAdd folderJournal & webhoooks y4› OAuth> PropertiesENMIDANMENTS> SPFCS> FLOWS@ Connect Git = Concole 5.) Termin"Lukas sterka 121• In Zn 14mOIteratio,No environment v|x= Publish docsD RunShare100% L2Thu 7 May 15:16:11UparadeVAIIAll variablesNo environment selected. Select envionmenc Iteration run Search HSNo variabies derined in this collection. AdeG GlobalstokenCKPur5PaMxIZQINQ.baseUrlhttps:/api.hubapi.comdev-tokenCLLm5NnQMxIRQIN.^ Local VaultStore y vau APl secrets locally in valt.Globals Vault Tools S000...
|
NULL
|
8678916378313881344
|
NULL
|
click
|
ocr
|
NULL
|
PostmanEditVIewWindowmelpHubSpot rate limit impl PostmanEditVIewWindowmelpHubSpot rate limit implementation strategy vcan I call it from postman 100 timesEvaluated Postman testing methods and rate limit behavior implications ›Yes, easily. Postman has a built-in Collection Runner for this.How to do it1. Save the request to a collection (right-click - Save).2. Click Run collection (the play icon next to the collection name) or open therunner from the bottom-left.3. Set Iterations: 100, Delay: O (or a small value like 50ms).4. Hit Run.You'll get a results view showing each iteration's status code response time and (ifyou click into them the headers.What you'll actually seeCince vol connrmed May=110 Tinterval=t dddd•• At Oms delay, 100 iterations: Postman pushes calls as fast as TCP allows -typically 5-10 calls/second on a normal connection. You'l likely see all 100succeed because 100 < 110 in 10 seconds, and each call's latency naturally spacesthings out. The X-HubSpot-RateLimit-Remaining header willdron from 109 →108 → 107 .…. down to maybe ~10-20 by the end, then recover as the 10-secondwindow siides torward.• To deliberatelv hit a 429: set iterations to 120+ with Oms delav. You'llsee thenret ~l0 reruirn2o0. then 2 bulrct of 42es with nol ievname :TEN SECONDIY ROLITNG• To test the search limit instead: point the request at a search endpoint (e.g.,POST /crm/v3/objects/contacts/search with a minimal body), set iterationsto 10, delay to 0. You'll trigger 429s wi / ›licyName: SECONDLY after the 5thcall within a second. Faster and cheaper to reproduce than the burst limit.Keep going in Claude CodeSwitch to Claude Code and let Claude work directiv in vour.repo, running and testing as it goes.Write a message…Opus 4. AdaptiveHubspot rate limits reference - MDUse timeZone to interpret resetsAt from the daily erCheat sheet: profiling a new portal in PostmanThree calls, in order:1. GEl /account-into/vs/details portalinto+GET /account-info/v3/api-usage/daily/privemeaningful for private apps)3. Skip search probing — the 5/sec is fixedError response shape"message": "You have reached your secondly 1:"errorType" : "RATE_LIMIT","policyName" : "SECONDLY","correlationia": "...","requestId": "..."nolncvname values.• SECONDLY - search bucket (5/sec)• TEN_SECONDLY_ROLLING - burst bucket (110/10sprivate)• DAILY — private apps daily ceilingAlways inspect policyName on 429 to know which bucback off.Other operational guidelines• Error responses must stay under 5% of total dailycertificationi• Polling endpoints: minimum interval 5 minutes.• Search querv: max 3.000 chars, max 18 filters acroresults per query.• Ratch enânoints. 1in to 100 records ner call regdlaXx Hubspot vQ SearchYour team is now on the Free plan with 1 admin. You retain editing access and other members are read-only. View team permissions to see who can edit, or upgrade to restore collaborationIteration run Search HSCOLLECTIONSe.9. An error occurred.29; successtul operationIteration run Search HS> DEL Archive• You M0 0uU1 O 03:15 PM. May 07. 2026>PATCH Update> GET List>post CreateHelp people understand your collection by adding a description. *; Write with AlPost Filter. Sort. and Search CRM Obiects29: successtul operationgo. An error occurred.› CRM Owners> CRM Pioelines>Dealsv Engagements> O OLD ENGAGEMENTSGET list meetingsPOST search modified companiesPOST search taskseroadnai> POST search callscet list callsPOST meetinas scheduledGET get meetingPOST aet link to task>Post create contact with association> Hubsoot~ Iteration run HS~ GET Read Copycf. An error occurred.eg. successful onerationPosT searcia,contact by email CopyIteration run Search HSCollection is emptyAdd a reauest or folder to structure vour API* Add requestAdd folderJournal & webhoooks y4› OAuth> PropertiesENMIDANMENTS> SPFCS> FLOWS@ Connect Git = Concole 5.) Termin"Lukas sterka 121• In Zn 14mOIteratio,No environment v|x= Publish docsD RunShare100% L2Thu 7 May 15:16:11UparadeVAIIAll variablesNo environment selected. Select envionmenc Iteration run Search HSNo variabies derined in this collection. AdeG GlobalstokenCKPur5PaMxIZQINQ.baseUrlhttps:/api.hubapi.comdev-tokenCLLm5NnQMxIRQIN.^ Local VaultStore y vau APl secrets locally in valt.Globals Vault Tools S000...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
27711
|
NULL
|
0
|
2026-05-12T14:36:38.023150+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778596598023_m2.jpg...
|
Firefox
|
Meet - Retro - Platform — Work
|
True
|
meet.google.com/bdj-nvho-bms?authuser=lukas.kovali meet.google.com/bdj-nvho-bms?authuser=lukas.kovalik%40jiminny.com...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778596598023_m2.jpg...
|
Meet - Retro - Platform
Close tab
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Meet - Retro - Platform","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.016123671,"height":-0.051875472},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.27094415,"top":1.0,"width":0.004986702,"height":-0.051875472},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
8678246806956912200
|
-8262081321836597610
|
click
|
hybrid
|
NULL
|
Meet - Retro - Platform
Close tab
Activity°Morerir Meet - Retro - Platform
Close tab
Activity°MorerireroxToolsHelpcalVIewMistorJiminny ...TMore unreads# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...o Direct messagesD. Galya Dimitrova. Steliyan Georgiev E&. Petko Kashinski. Aneliya Angelova •a. Stefka StoyanovaC. Vasil Vasilev.. Nikolay Ivanov3 Aneliva Angelova, .•.. Stoyan Tanev&. Lukas Kovalik y...::: Apps© Jira Cloud• ToastbookmarksProtllesWindowJY-207... Sira Clo...Automated report - sentryJira Cloud CDetailsConversations 4DescriptionWe still get Sentry error when attempting to sendreport resuit witnout per un.•vve need to mark such a report as Tallea so luis not picked up for sending again in one hour•nx the issue so we can have a generatedreport for the customenStatusBack ogAssigneeNoneKeporterlukas KovallkWork TypeBugPriorityOpen in Jira©ProfileController.phpc) Searchcontroller.ohr> D Settings→E Telenhonv~ D Webhook• M Hubsoot> D IntegrationAppSubsc 136(C) ActivitvProviderCont(C) ActivitvtranscriotionC) BaseController.oho© CalendarController.pC) RenortController nho* SoftphoneWebhookCC. AbstractController nhn• TrackAutomatedReportGeneratedEvent.phpPlaybackController.phpcontroLlerest: JsonkesponsegetFrequency() === AutomatedReportsService::FREQUENCY_ONE_OFF) €batch(new SendReportJob($reportUuid));port if it set and generatedSreportPodcast->getStatus() === AutomatedReportResult::STATUS_GENERATED) {•dispatch(new SendReportJob(reportUuid: $reportPodcast->getUuid()));or aucomaced reporusгдескерогс)иsnlovaradoe саuсomасeакерort, «rерorc•>pushlovatadoa saucomatedkeport, sreportroacast^OG_PREFIX . ' Triggering Event for UserPilot tracking', InatedReport->getUuid(),rtuuid.spatchinew AutomatedRedortGeneratedSautomatedRenort:h $exception) {LOG_PREFIX •" Report not found', L›detMessade Oi.istatus' →> 'error', 'message' => 'Report not found'], status: 404);SummariseLOG_PREFIX . ' Failed to update report status', ['error' => $exception-›getMessage(),return response()->json(['status' => 'error', 'message' => 'Failed to update report status'], status: 500);return response()->json(['status' => 'ok']);C PlanhaTypeError: League|Flysystem|FileCloudWatch | us-east-2O Pipelines - jiminny/app(UY-20725) (HubSpot) Optimise CIJY-20725 add HS rate limit handlin7 wuy-207731 User Pilot not rece X@Jy-20773 fix user pilot tracking for(JY-20776] Automated report - seJY-20725 add HS rate limit handlir$ (SRD-6793] Les Mills activity typePlatform Team - Backlog - Jirau Userpilot | Automated Report Gene(UY-20776] Automated report - ser-7 Platform Sorint 3 02 - Platform Te— New TabO JIMINNY@ For you(• Recent# Starred8$ Apps• Spaces+...Jiminny (New)ul Plarorm leamIID Capture TeamWD Enterprise Stability I…..I Processing TeamMl SE Kanban( Service-Desk= More spaces— FiltersB DashboardsC÷ OperationsI2 Confluence:ã Teams"= Customise sidebarB < 50hl# Retro - Platform • nowninny.atlassian.net/browse/JY-20773Q Search |+ CreateSpaces / Jiminny (New) / & JY-19240 / ** JY-20773User Pilot not receiving events on report generated~ Key detailsDescriptionWhen new report is generated User Pilot should receive tracking event. The event is still inpending meaning no new event has arrived.Steps to reproduceNoneActual outcomeAdd text IExpected outcomeAdd textSubtasksAdd subtaskLinked work itemsAdd linked work item~ ActivityAllComments HistoryWork logTtvBI..|Type /ại for Atlassian Intelligence or@ to mention and notify someone.CancelLukas Kovalik8 hours agoThe issue is most probably AutomatedReportGenerated event and not listener sendingdata to UP. The PR should address it.100% C42 & • Tue 12 May 17:07:25Ask RovoIn Devv* Improve Bug~ DetailsAssignee@ Lukas KovalikReporterLukas KovalikDevelopmentQ Open with VS Code8S Create branch4 commits1 pull request3 builds3 hours agoMERGEDLabelsNoneSub-ProductAdd optionsStory PointsOrganisationsNoneComponentsPlatformFix versionsNoneParent# JY-19240 AJ ReportsSprintPlatform Sprint 3 Q2...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
23928
|
1003
|
91
|
2026-05-12T08:30:56.126887+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778574656126_m2.jpg...
|
Firefox
|
Jiminny — Work
|
True
|
app.jiminny.com/ai-reports
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
New Tab
Jy 20820 es reindex stream model h New Tab
New Tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Pull requests · jiminny/app
Pull requests · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app
JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app
Data Explorer
Data Explorer
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
Jiminny
Jiminny
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
6
6
AI Reports
AI Reports
Ask Jiminny reports
Ask Jiminny reports
Report name
5-12 Apr, 2026
2026
Mo
Tu
We
Th
Coaching Profiles × Report Type
Coaching Profiles
×
Report Type
Clear all
NAME
FREQUENCY
SHARED
DATE
ACTIONS
Coaching Profiles - 30 Mar - 5 Apr 2026 - Client Success, UK Sales
Weekly
+1
06/04/2026
Coaching Profiles Podcast - 30 Mar - 5 Apr 2026 - Client Success, UK Sales
Weekly
+1
06/04/2026
You are currently impersonating Adelina Petrova...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.3643617,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.3776596,"top":0.06304868,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"bounds":{"left":0.3643617,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":5,"bounds":{"left":0.3776596,"top":0.09577015,"width":0.16888298,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":4,"bounds":{"left":0.3643617,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":5,"bounds":{"left":0.3776596,"top":0.12849163,"width":0.16140293,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.3643617,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.3776596,"top":0.16121309,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.3643617,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.3776596,"top":0.19393456,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pull requests · jiminny/app","depth":4,"bounds":{"left":0.3643617,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · jiminny/app","depth":5,"bounds":{"left":0.3776596,"top":0.22665602,"width":0.04537899,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":4,"bounds":{"left":0.3643617,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":5,"bounds":{"left":0.3776596,"top":0.25937748,"width":0.1200133,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":4,"bounds":{"left":0.3643617,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":5,"bounds":{"left":0.3776596,"top":0.29209897,"width":0.19331782,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20776] Automated report - sentry - Jira","depth":4,"bounds":{"left":0.3643617,"top":0.31364724,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20776] Automated report - sentry - Jira","depth":5,"bounds":{"left":0.3776596,"top":0.32482043,"width":0.07646277,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":4,"bounds":{"left":0.3643617,"top":0.3463687,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":5,"bounds":{"left":0.3776596,"top":0.3575419,"width":0.40475398,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.3643617,"top":0.3790902,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.3776596,"top":0.39026338,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app","depth":4,"bounds":{"left":0.3643617,"top":0.41181165,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app","depth":5,"bounds":{"left":0.3776596,"top":0.42298484,"width":0.15159574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Data Explorer","depth":4,"bounds":{"left":0.3643617,"top":0.4445331,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Data Explorer","depth":5,"bounds":{"left":0.3776596,"top":0.4557063,"width":0.0234375,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20776] Automated report - sentry - Jira","depth":4,"bounds":{"left":0.3643617,"top":0.4772546,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20776] Automated report - sentry - Jira","depth":5,"bounds":{"left":0.3776596,"top":0.4884278,"width":0.07646277,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.3643617,"top":0.509976,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.3776596,"top":0.5211492,"width":0.013131649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.43168217,"top":0.5171588,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.3671875,"top":0.5442937,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.3671875,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.37815824,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.38929522,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.40043217,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.41156915,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"6","depth":12,"bounds":{"left":0.44664228,"top":0.91380686,"width":0.015957447,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6","depth":14,"bounds":{"left":0.45611703,"top":0.9173983,"width":0.0023271276,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"AI Reports","depth":13,"bounds":{"left":0.47323802,"top":0.06943336,"width":0.031416222,"height":0.019553073},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AI Reports","depth":14,"bounds":{"left":0.47323802,"top":0.06943336,"width":0.031416222,"height":0.019553073},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Ask Jiminny reports","depth":13,"bounds":{"left":0.93267953,"top":0.06464485,"width":0.059341755,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Jiminny reports","depth":14,"bounds":{"left":0.94630986,"top":0.07222666,"width":0.04105718,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Report name","depth":17,"bounds":{"left":0.48603722,"top":0.10933759,"width":0.058011968,"height":0.019952115},"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5-12 Apr, 2026","depth":20,"bounds":{"left":0.563996,"top":0.114924185,"width":0.029089095,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":25,"bounds":{"left":0.54853725,"top":0.15522745,"width":0.00930851,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mo","depth":24,"bounds":{"left":0.5093085,"top":0.1783719,"width":0.005984043,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tu","depth":24,"bounds":{"left":0.5221077,"top":0.1783719,"width":0.0043218085,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"We","depth":24,"bounds":{"left":0.53307843,"top":0.1783719,"width":0.0063164895,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Th","depth":24,"bounds":{"left":0.54587764,"top":0.1783719,"width":0.004654255,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Coaching Profiles × Report Type","depth":16,"bounds":{"left":0.63380986,"top":0.10933759,"width":0.06615692,"height":0.028731046},"on_screen":true,"value":"Coaching Profiles × Report Type","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Coaching Profiles","depth":20,"bounds":{"left":0.63613695,"top":0.11691939,"width":0.036402926,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"×","depth":21,"bounds":{"left":0.67486703,"top":0.11652035,"width":0.0028257978,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Report Type","depth":18,"on_screen":false,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Clear all","depth":13,"bounds":{"left":0.7062833,"top":0.112529926,"width":0.028424202,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NAME","depth":16,"bounds":{"left":0.47290558,"top":0.17398244,"width":0.012965426,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FREQUENCY","depth":16,"bounds":{"left":0.6978058,"top":0.17398244,"width":0.026263298,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SHARED","depth":16,"bounds":{"left":0.7727726,"top":0.17398244,"width":0.017453458,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":16,"bounds":{"left":0.84773934,"top":0.17398244,"width":0.011136968,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ACTIONS","depth":16,"bounds":{"left":0.9227061,"top":0.17398244,"width":0.019115692,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Coaching Profiles - 30 Mar - 5 Apr 2026 - Client Success, UK Sales","depth":17,"bounds":{"left":0.48620346,"top":0.22067039,"width":0.13763298,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Weekly","depth":17,"bounds":{"left":0.6978058,"top":0.22067039,"width":0.014960106,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+1","depth":17,"bounds":{"left":0.8005319,"top":0.22146848,"width":0.004488032,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"06/04/2026","depth":17,"bounds":{"left":0.84773934,"top":0.22067039,"width":0.024102394,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Coaching Profiles Podcast - 30 Mar - 5 Apr 2026 - Client Success, UK Sales","depth":17,"bounds":{"left":0.48620346,"top":0.2677574,"width":0.15558511,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Weekly","depth":17,"bounds":{"left":0.6978058,"top":0.2677574,"width":0.014960106,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+1","depth":17,"bounds":{"left":0.8005319,"top":0.26855546,"width":0.004488032,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"06/04/2026","depth":17,"bounds":{"left":0.84773934,"top":0.2677574,"width":0.024102394,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You are currently impersonating Adelina Petrova","depth":11,"bounds":{"left":0.66638964,"top":0.053072624,"width":0.10073138,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8676967306828481977
|
-2592646069724907350
|
click
|
accessibility
|
NULL
|
New Tab
New Tab
Jy 20820 es reindex stream model h New Tab
New Tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Pull requests · jiminny/app
Pull requests · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app
JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app
Data Explorer
Data Explorer
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
Jiminny
Jiminny
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
6
6
AI Reports
AI Reports
Ask Jiminny reports
Ask Jiminny reports
Report name
5-12 Apr, 2026
2026
Mo
Tu
We
Th
Coaching Profiles × Report Type
Coaching Profiles
×
Report Type
Clear all
NAME
FREQUENCY
SHARED
DATE
ACTIONS
Coaching Profiles - 30 Mar - 5 Apr 2026 - Client Success, UK Sales
Weekly
+1
06/04/2026
Coaching Profiles Podcast - 30 Mar - 5 Apr 2026 - Client Success, UK Sales
Weekly
+1
06/04/2026
You are currently impersonating Adelina Petrova...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
7900
|
350
|
43
|
2026-05-08T09:38:29.573854+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778233109573_m2.jpg...
|
Firefox
|
JY-20818 move ask jiminny reports to its own datad JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app — Work...
|
True
|
github.com/jiminny/app/pull/12056
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 3 Q2 - Platform Team - Scrum Board Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -4,16 +4,17 @@445namespace Jiminny\Component\Nudge\Job;5namespace Jiminny\Component\Nudge\Job;667+use Carbon\Carbon;7use Illuminate\Bus\Queueable;8use Illuminate\Bus\Queueable;8use Illuminate\Contracts\Queue\ShouldQueue;9use Illuminate\Contracts\Queue\ShouldQueue;9-use Illuminate\Database\Eloquent\Builder;10use Illuminate\Foundation\Bus\Dispatchable;10use Illuminate\Foundation\Bus\Dispatchable;11use Illuminate\Queue\InteractsWithQueue;11use Illuminate\Queue\InteractsWithQueue;12use Illuminate\Queue\SerializesModels;12use Illuminate\Queue\SerializesModels;13use Illuminate\Support\Facades\Log;13use Illuminate\Support\Facades\Log;14use Jiminny\Component\Queue\Constants;14use Jiminny\Component\Queue\Constants;15use Jiminny\Models\Activity;15use Jiminny\Models\Activity;16use Jiminny\Models\Activity\Search;16use Jiminny\Models\Activity\Search;17+use Jiminny\Models\Activity\SearchFilter;17use Jiminny\Models\Nudge;18use Jiminny\Models\Nudge;18use Jiminny\Models\Team;19use Jiminny\Models\Team;1920@@ -34,37 +35,201 @@343535public function handle(): void36public function handle(): void36 {37 {37-/** @var Activity $activity */38+$activity = Activity::with(['user.group'])->uuid($this->activityUuid, false)->firstOrFail();38-$activity = Activity::with(['user'])->uuid($this->activityUuid, false)->firstOrFail();39-40-/** @var Team $team */41$team = Team::with(['users'])->findOrFail($activity->user->team_id);39$team = Team::with(['users'])->findOrFail($activity->user->team_id);424043- Log::info(__METHOD__ . " Running for team $team->id.", [44-'activity_id' => $activity->id,45-'activity_uuid' => $this->activityUuid,46-'team_id' => $team->id,47- ]);48-49$usersIds = $team->users->pluck('id')->toArray();41$usersIds = $team->users->pluck('id')->toArray();504251-$searchesWithImmediateNudges = Activity\Search::with(['nudges'])43+$searchesWithImmediateNudges = Activity\Search::with([44+'nudges' => fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY),45+'filters',46+ ])52 ->whereIn('user_id', $usersIds)47 ->whereIn('user_id', $usersIds)53- ->whereHas('nudges', function (Builder $query) {48+ ->whereHas('nudges', fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY))54-$query->where('frequency', Nudge::FREQ_INSTANTLY);49+ ->get();55- })->get();50+51+$totalSearches = $searchesWithImmediateNudges->count();52+$skippedCount = 0;53+54+$searchesWithImmediateNudges->each(function (Search $search) use ($activity, &$skippedCount): void {55+$matchResult = $this->activityMightMatchSearch($activity, $search);565657-$searchesWithImmediateNudges->each(function (Search $search): void {57+if (! $matchResult['matches']) {58-$search->nudges->each(function (Nudge $nudge): void {58+$skippedCount++;59-// Filter only nudges that are set to be sent instantly59+ Log::info('Pre-filter skipped nudge dispatch', [60-if ($nudge->frequency === Nudge::FREQ_INSTANTLY) {60+'activity_uuid' => $activity->getUuid(),61- Log::info("Dispatching ProcessNudgeSearchJob for nudge $nudge->id.");61+'search_id' => $search->getId(),62+'mismatched_filter' => $matchResult['mismatch_reason'],63+'filter_value' => $matchResult['filter_value'],64+ ]);626563- ProcessNudgeSearchJob::dispatch($nudge);66+return;67+ }646865- Log::info("ProcessNudgeSearchJob dispatched for nudge $nudge->id.");69+$search->nudges->each(fn ($nudge) => ProcessNudgeSearchJob::dispatch($nudge));66- }67- });68 });70 });71+72+if ($totalSearches > 0) {73+ Log::info('Nudge pre-filter results', [74+'activity_uuid' => $activity->getUuid(),75+'total_searches' => $totalSearches,76+'skipped' => $skippedCount,77+'dispatched' => $totalSearches - $skippedCount,78+'skip_rate' => round(($skippedCount / $totalSearches) * 100, 2) . '%',79+ ]);80+ }81+ }82+83+private function activityMightMatchSearch(Activity $activity, Search $search): array84+ {85+foreach ($search->filters as $filter) {86+$filterName = $filter->getFilterProperty();87+88+$result = match ($filterName) {89+'group_id' => $this->checkGroupId($activity, $filter),90+'user_id' => $this->checkUserId($activity, $filter),91+'channel_id' => $this->checkChannelId($activity, $filter),92+'provider_id' => $this->checkProviderId($activity, $filter),93+'category_id' => $this->checkCategoryId($activity, $filter),94+'min_duration' => $this->checkMinDuration($activity, $filter),95+'max_duration' => $this->checkMaxDuration($activity, $filter),96+'not_logged' => $this->checkNotLogged($activity, $filter),97+'only_recorded' => $this->checkOnlyRecorded($activity, $filter),98+'languages' => $this->checkLanguages($activity, $filter),99+'stage_id' => $this->checkStageId($activity, $filter),100+'start_date' => $this->checkStartDate($activity, $filter),101+'end_date' => $this->checkEndDate($activity, $filter),102+default => null, // Unknown filter - can't pre-check, assume might match103+ };104+105+if ($result === false) {106+return [107+'matches' => false,108+'mismatch_reason' => $filterName,109+'filter_value' => $filter->getFilterValue(),110+ ];111+ }112+ }113+114+return ['matches' => true];115+ }116+117+private function checkGroupId(Activity $activity, SearchFilter $filter): ?bool118+ {119+$groupUuid = $activity->user->getGroup()?->getUuid();120+if ($groupUuid === null) {121+return null;122+ }123+124+return $filter->getFilterValue() === $groupUuid ? null : false;125+ }126+127+private function checkUserId(Activity $activity, SearchFilter $filter): ?bool128+ {129+return $filter->getFilterValue() === $activity->user->getUuid() ? null : false;130+ }131+132+private function checkChannelId(Activity $activity, SearchFilter $filter): ?bool133+ {134+return $filter->getFilterValue() === $activity->getType() ? null : false;135+ }136+137+private function checkProviderId(Activity $activity, SearchFilter $filter): ?bool138+ {139+return $filter->getFilterValue() === $activity->getProvider() ? null : false;140+ }141+142+private function checkCategoryId(Activity $activity, SearchFilter $filter): ?bool143+ {144+$categoryId = $activity->getCategory()?->getUuid();145+if ($categoryId === null) {146+return null;147+ }148+149+return $filter->getFilterValue() === $categoryId ? null : false;150+ }151+152+private function checkMinDuration(Activity $activity, SearchFilter $filter): ?bool153+ {154+return $activity->getDuration() >= (float) $filter->getFilterValue() ? null : false;155+ }156+157+private function checkMaxDuration(Activity $activity, SearchFilter $filter): ?bool158+ {159+return $activity->getDuration() <= (float) $filter->getFilterValue() ? null : false;160+ }161+162+private function checkNotLogged(Activity $activity, SearchFilter $filter): ?bool163+ {164+if (! $filter->getFilterValue()) {165+return null;166+ }167+168+$isLogged = $activity->getCrmProviderId() !== null;169+$isInternal = $activity->isInternal();170+171+return (! $isLogged || $isInternal) ? null : false;172+ }173+174+private function checkOnlyRecorded(Activity $activity, SearchFilter $filter): ?bool175+ {176+$filterValue = (int) $filter->getFilterValue();177+$hasRecording = $activity->recording_state !== Activity::RECORDING_OFF;178+179+return match ($filterValue) {180+1 => $hasRecording ? null : false, // Only recorded181+2 => ! $hasRecording ? null : false, // Only non-recorded182+default => null,183+ };184+ }185+186+private function checkStageId(Activity $activity, SearchFilter $filter): ?bool187+ {188+$stageId = $activity->getStage()?->getUuid();189+if ($stageId === null) {190+return null; // No stage, let ES handle191+ }192+193+return $filter->getFilterValue() === $stageId ? null : false;194+ }195+196+private function checkStartDate(Activity $activity, SearchFilter $filter): ?bool197+ {198+$startTime = $activity->getActualStartTime();199+if ($startTime === null) {200+return null;201+ }202+203+$filterDate = Carbon::parse($filter->getFilterValue());204+205+return $startTime->gte($filterDate) ? null : false;206+ }207+208+private function checkEndDate(Activity $activity, SearchFilter $filter): ?bool209+ {210+$endTime = $activity->getActualEndTime();211+if ($endTime === null) {212+return null;213+ }214+215+$filterDate = Carbon::parse($filter->getFilterValue())->endOfDay();216+217+return $endTime->lte($filterDate) ? null : false;218+ }219+220+private function checkLanguages(Activity $activity, SearchFilter $filter): ?bool221+ {222+$activityLanguage = $activity->getLanguageCode();223+if ($activityLanguage === null) {224+return null;225+ }226+227+// Filter values are always base language codes (e.g., 'en', 'fr').228+// Extract base code from activity locale (e.g., en_GB -> en) to match ES query behavior.229+// See LanguageFilterDefinition::getQueries() which uses regex: $language . '_[a-z]{2}'230+$activityLangCode = explode('_', $activityLanguage)[0];231+$filterLanguage = $filter->getFilterValue();232+233+return $activityLangCode === $filterLanguage ? null : false;69 }234 }70}235}</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 20493 smart instant nudge pre filtering by niko</tabTitle>” with “<selection>@@ -4,16 +4,17 @@445namespace Jiminny\Component\Nudge\Job;5namespace Jiminny\Component\Nudge\Job;667+use Carbon\Carbon;7use Illuminate\Bus\Queueable;8use Illuminate\Bus\Queueable;8use Illuminate\Contracts\Queue\ShouldQueue;9use Illuminate\Contracts\Queue\ShouldQueue;9-use Illuminate\Database\Eloquent\Builder;10use Illuminate\Foundation\Bus\Dispatchable;10use Illuminate\Foundation\Bus\Dispatchable;11use Illuminate\Queue\InteractsWithQueue;11use Illuminate\Queue\InteractsWithQueue;12use Illuminate\Queue\SerializesModels;12use Illuminate\Queue\SerializesModels;13use Illuminate\Support\Facades\Log;13use Illuminate\Support\Facades\Log;14use Jiminny\Component\Queue\Constants;14use Jiminny\Component\Queue\Constants;15use Jiminny\Models\Activity;15use Jiminny\Models\Activity;16use Jiminny\Models\Activity\Search;16use Jiminny\Models\Activity\Search;17+use Jiminny\Models\Activity\SearchFilter;17use Jiminny\Models\Nudge;18use Jiminny\Models\Nudge;18use Jiminny\Models\Team;19use Jiminny\Models\Team;1920@@ -34,37 +35,201 @@343535public function handle(): void36public function handle(): void36 {37 {37-/** @var Activity $activity */38+$activity = Activity::with(['user.group'])->uuid($this->activityUuid, false)->firstOrFail();38-$activity = Activity::with(['user'])->uuid($this->activityUuid, false)->firstOrFail();39-40-/** @var Team $team */41$team = Team::with(['users'])->findOrFail($activity->user->team_id);39$team = Team::with(['users'])->findOrFail($activity->user->team_id);424043- Log::info(__METHOD__ . " Running for team $team->id.", [44-'activity_id' => $activity->id,45-'activity_uuid' => $this->activityUuid,46-'team_id' => $team->id,47- ]);48-49$usersIds = $team->users->pluck('id')->toArray();41$usersIds = $team->users->pluck('id')->toArray();504251-$searchesWithImmediateNudges = Activity\Search::with(['nudges'])43+$searchesWithImmediateNudges = Activity\Search::with([44+'nudges' => fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY),45+'filters',46+ ])52 ->whereIn('user_id', $usersIds)47 ->whereIn('user_id', $usersIds)53- ->whereHas('nudges', function (Builder $query) {48+ ->whereHas('nudges', fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY))54-$query->where('frequency', Nudge::FREQ_INSTANTLY);49+ ->get();55- })->get();50+51+$totalSearches = $searchesWithImmediateNudges->count();52+$skippedCount = 0;53+54+$searchesWithImmediateNudges->each(function (Search $search) use ($activity, &$skippedCount): void {55+$matchResult = $this->activityMightMatchSearch($activity, $search);565657-$searchesWithImmediateNudges->each(function (Search $search): void {57+if (! $matchResult['matches']) {58-$search->nudges->each(function (Nudge $nudge): void {58+$skippedCount++;59-// Filter only nudges that are set to be sent instantly59+ Log::info('Pre-filter skipped nudge dispatch', [60-if ($nudge->frequency === Nudge::FREQ_INSTANTLY) {60+'activity_uuid' => $activity->getUuid(),61- Log::info("Dispatching ProcessNudgeSearchJob for nudge $nudge->id.");61+'search_id' => $search->getId(),62+'mismatched_filter' => $matchResult['mismatch_reason'],63+'filter_value' => $matchResult['filter_value'],64+ ]);626563- ProcessNudgeSearchJob::dispatch($nudge);66+return;67+ }646865- Log::info("ProcessNudgeSearchJob dispatched for nudge $nudge->id.");69+$search->nudges->each(fn ($nudge) => ProcessNudgeSearchJob::dispatch($nudge));66- }67- });68 });70 });71+72+if ($totalSearches > 0) {73+ Log::info('Nudge pre-filter results', [74+'activity_uuid' => $activity->getUuid(),75+'total_searches' => $totalSearches,76+'skipped' => $skippedCount,77+'dispatched' => $totalSearches - $skippedCount,78+'skip_rate' => round(($skippedCount / $totalSearches) * 100, 2) . '%',79+ ]);80+ }81+ }82+83+private function activityMightMatchSearch(Activity $activity, Search $search): array84+ {85+foreach ($search->filters as $filter) {86+$filterName = $filter->getFilterProperty();87+88+$result = match ($filterName) {89+'group_id' => $this->checkGroupId($activity, $filter),90+'user_id' => $this->checkUserId($activity, $filter),91+'channel_id' => $this->checkChannelId($activity, $filter),92+'provider_id' => $this->checkProviderId($activity, $filter),93+'category_id' => $this->checkCategoryId($activity, $filter),94+'min_duration' => $this->checkMinDuration($activity, $filter),95+'max_duration' => $this->checkMaxDuration($activity, $filter),96+'not_logged' => $this->checkNotLogged($activity, $filter),97+'only_recorded' => $this->checkOnlyRecorded($activity, $filter),98+'languages' => $this->checkLanguages($activity, $filter),99+'stage_id' => $this->checkStageId($activity, $filter),100+'start_date' => $this->checkStartDate($activity, $filter),101+'end_date' => $this->checkEndDate($activity, $filter),102+default => null, // Unknown filter - can't pre-check, assume might match103+ };104+105+if ($result === false) {106+return [107+'matches' => false,108+'mismatch_reason' => $filterName,109+'filter_value' => $filter->getFilterValue(),110+ ];111+ }112+ }113+114+return ['matches' => true];115+ }116+117+private function checkGroupId(Activity $activity, SearchFilter $filter): ?bool118+ {119+$groupUuid = $activity->user->getGroup()?->getUuid();120+if ($groupUuid === null) {121+return null;122+ }123+124+return $filter->getFilterValue() === $groupUuid ? null : false;125+ }126+127+private function checkUserId(Activity $activity, SearchFilter $filter): ?bool128+ {129+return $filter->getFilterValue() === $activity->user->getUuid() ? null : false;130+ }131+132+private function checkChannelId(Activity $activity, SearchFilter $filter): ?bool133+ {134+return $filter->getFilterValue() === $activity->getType() ? null : false;135+ }136+137+private function checkProviderId(Activity $activity, SearchFilter $filter): ?bool138+ {139+return $filter->getFilterValue() === $activity->getProvider() ? null : false;140+ }141+142+private function checkCategoryId(Activity $activity, SearchFilter $filter): ?bool143+ {144+$categoryId = $activity->getCategory()?->getUuid();145+if ($categoryId === null) {146+return null;147+ }148+149+return $filter->getFilterValue() === $categoryId ? null : false;150+ }151+152+private function checkMinDuration(Activity $activity, SearchFilter $filter): ?bool153+ {154+return $activity->getDuration() >= (float) $filter->getFilterValue() ? null : false;155+ }156+157+private function checkMaxDuration(Activity $activity, SearchFilter $filter): ?bool158+ {159+return $activity->getDuration() <= (float) $filter->getFilterValue() ? null : false;160+ }161+162+private function checkNotLogged(Activity $activity, SearchFilter $filter): ?bool163+ {164+if (! $filter->getFilterValue()) {165+return null;166+ }167+168+$isLogged = $activity->getCrmProviderId() !== null;169+$isInternal = $activity->isInternal();170+171+return (! $isLogged || $isInternal) ? null : false;172+ }173+174+private function checkOnlyRecorded(Activity $activity, SearchFilter $filter): ?bool175+ {176+$filterValue = (int) $filter->getFilterValue();177+$hasRecording = $activity->recording_state !== Activity::RECORDING_OFF;178+179+return match ($filterValue) {180+1 => $hasRecording ? null : false, // Only recorded181+2 => ! $hasRecording ? null : false, // Only non-recorded182+default => null,183+ };184+ }185+186+private function checkStageId(Activity $activity, SearchFilter $filter): ?bool187+ {188+$stageId = $activity->getStage()?->getUuid();189+if ($stageId === null) {190+return null; // No stage, let ES handle191+ }192+193+return $filter->getFilterValue() === $stageId ? null : false;194+ }195+196+private function checkStartDate(Activity $activity, SearchFilter $filter): ?bool197+ {198+$startTime = $activity->getActualStartTime();199+if ($startTime === null) {200+return null;201+ }202+203+$filterDate = Carbon::parse($filter->getFilterValue());204+205+return $startTime->gte($filterDate) ? null : false;206+ }207+208+private function checkEndDate(Activity $activity, SearchFilter $filter): ?bool209+ {210+$endTime = $activity->getActualEndTime();211+if ($endTime === null) {212+return null;213+ }214+215+$filterDate = Carbon::parse($filter->getFilterValue())->endOfDay();216+217+return $endTime->lte($filterDate) ? null : false;218+ }219+220+private function checkLanguages(Activity $activity, SearchFilter $filter): ?bool221+ {222+$activityLanguage = $activity->getLanguageCode();223+if ($activityLanguage === null) {224+return null;225+ }226+227+// Filter values are always base language codes (e.g., 'en', 'fr').228+// Extract base code from activity locale (e.g., en_GB -> en) to match ES query behavior.229+// See LanguageFilterDefinition::getQueries() which uses regex: $language . '_[a-z]{2}'230+$activityLangCode = explode('_', $activityLanguage)[0];231+$filterLanguage = $filter->getFilterValue();232+233+return $activityLangCode === $filterLanguage ? null : false;69 }234 }70}235}</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
Gemini said
Gemini said
This code selection introduces a
pre-filtering mechanism
to the
Jiminny\Component\Nudge\Job
namespace. The primary goal is to optimize performance by validating an activity against search criteria in-memory before dispatching costly background jobs.
Core Functionality Changes
Core Functionality Changes
Selective Loading:
The
handle()
method now eager-loads
user.group
for activities and specifically filters for
FREQ_INSTANTLY
nudges and their associated search filters.
Pre-Dispatch Validation:
Instead of dispatching jobs for every instant nudge, the system now calls
activityMightMatchSearch()
.
Short-Circuiting:
If an activity fails a pre-filter check (e.g., mismatched user ID or duration), the job dispatch is skipped, and the event is logged with the specific mismatch reason.
Performance Metrics:
Adds summary logging at the end of the process to track:
Total searches processed.
Number of skipped dispatches.
The "Skip Rate" percentage.
Implemented Filter Checks
Implemented Filter Checks
The logic includes a
match
expression to validate various activity attributes against
SearchFilter
values:
Identity & Metadata:
Matches for
group_id
,
user_id
,
channel_id
, and
provider_id
.
Temporal & Duration:
* Validates
min_duration
and
max_duration
.
Checks
start_date
and
end_date
using Carbon parsing.
Activity State:
*
Logging:
Determines if an activity is logged to a CRM or is internal via
checkNotLogged
.
Recording:
Uses
checkOnlyRecorded
to filter based on whether a recording exists.
Categorization:
Checks for
category_id
,
stage_id
, and
languages
.
Note:
The language check specifically extracts base codes (e.g.,
en
from
en_GB
) to align with Elasticsearch behavior.
Logic Design
Logic Design
Nullable Returns:
Filter methods return
null
if a match is possible (or cannot be determined), and
false
only when a definitive mismatch is found.
Safe Fallback:
If a filter type is unknown (
default
), the system assumes a match and proceeds to dispatch, ensuring no false negatives.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
You said what is the logic behind diff. Act as code reviewer. First review the changes then explain it and then evaluate. Try to find potential issues and bottlenecks
You said
what is the logic behind diff. Act as code reviewer. First review the changes then explain it and then evaluate. Try to find potential issues and bottlenecks
Expand
Listen
Show more options
Show thinking
Gemini said
Gemini said
Here is a review of the changes provided in the diff, broken down by your requested structure.
1. Review of Changes
1. Review of Changes
This PR refactors the
ProcessNudgeSearchJob
dispatching mechanism within the
handle()
method.
Query Optimization:
Eager loads necessary relationships (
user.group
,
filters
) and scopes the
nudges
relationship at the database level to only fetch
FREQ_INSTANTLY
records.
In-Memory Filtering:
Introduces a pre-filtering mechanism (
activityMightMatchSearch
) that checks the
Activity
against
SearchFilter
criteria before deciding to dispatch a job.
Helper Methods:
Adds 13 private
check*
methods to handle the specific comparison logic for different filter types (e.g., duration, dates, categories, stages).
Observability:
Adds structured logging to record exactly why a nudge was skipped and outputs a summary report (total, skipped, dispatched, skip rate) at the end of the execution.
2. Explanation of Logic
2. Explanation of Logic
The core philosophy of this change is
"veto-based short-circuiting"
.
Previously, the job fetched all searches with instant nudges for a team's users and blindly dispatched a queue job for every single one. The heavy lifting of deciding if the activity actually matched the search was likely deferred to the queue worker and Elasticsearch.
Now, the code evaluates the filters in the current process:
It iterates through each
Search
and its associated
SearchFilter
s.
It routes the filter to a specific
check*
method using a
match
expression based on the filter's property name.
The Veto:
The
check*
methods are designed to return
false
only if there is an absolute mismatch
(e.g., the filter requires a minimum duration of 10, but the activity is 5).
The Pass:
If the filter matches, or if the activity lacks the data needed to make a firm decision (e.g., no stage is assigned, or the filter type is unrecognized), the method returns
null
. This acts as a pass, delegating the final strict evaluation to Elasticsearch later in the pipeline.
If any filter returns
false
, the search is skipped, saving a queue dispatch.
3. Evaluation
3. Evaluation
Overall, this is a
highly effective performance optimization
.
Pros:
It significantly reduces queue bloat. By filtering out obvious mismatches in-memory, you save the overhead of serializing, dispatching, picking up, and processing jobs that are destined to fail or do nothing. The use of
match
makes the routing exceptionally clean, and the nullable return design is a smart way to avoid false negatives.
Cons/Trade-offs:
You are trading background queue worker time for a slight increase in synchronous memory and CPU usage on the current job. However, queue I/O is almost always more expensive than simple in-memory comparisons, making this a worthwhile trade.
4. Potential Issues & Bottlenecks
4. Potential Issues & Bottlenecks
While the logic is sound, there are a few architectural bottlenecks and risks introduced or maintained in this diff:
Potential N+1 Query / Lazy Loading Issues:
In the
handle
method, the activity is loaded with
Activity::with(['user.group'])
. However, inside your new
check*
methods, you are calling:
$activity->getCategory()?->getUuid()
$activity->getStage()?->getUuid()
If
category
and
stage
are Eloquent relationships and are not eager-loaded on the original
$activity
model, calling these methods inside a loop of
$totalSearches
will trigger lazy-loaded database queries.
Fix:
Update line 38 to:
$activity = Activity::with(['user.group', 'category', 'stage'])->...
Massive Memory Consumption (Pre-existing but critical):
Lines 39-41:
PHP
Download code
Copy code
$team
= Team::with([
'users'
])->findOrFail(
$activity
->user->team_id);
$usersIds
=
$team
->users->pluck(
'id'
)->toArray();
If a team has thousands of users,
Team::with(['users'])
hydrates thousands of full Eloquent User models into memory just to extract their IDs.
Fix:
Bypass hydrating the models entirely by querying the relationship directly:
$usersIds = $team->users()->pluck('id')->toArray();
Repeated Carbon Parsing in Loops:
In
checkStartDate
and
checkEndDate
, you parse the filter date:
Carbon::parse($filter->getFilterValue())
. If the same date filter applies to multiple searches, Carbon is being instantiated repeatedly in the loop. While Carbon is relatively fast, doing this hundreds of times adds unnecessary CPU cycles.
Fix:
This is a minor nitpick, but if performance is the absolute goal, you could memoize/cache the parsed filter values within the job.
Loose Type Comparisons:
In methods like
checkChannelId
or
checkLanguages
, you are using strict equality (
===
). Ensure that
$filter->getFilterValue()
(which is typically returned as a string from a database payload) matches the exact type returned by
$activity->getType()
or
$activityLangCode
. If one is an integer
1
and the other is a string
"1"
, the strict check will return
false
, incorrectly preventing the nudge from sending.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said what would be your suggestion?
You said
what would be your suggestion?
Listen
Show more options
Show thinking
Gemini said
Gemini said
Here are actionable suggestions to address the potential issues and bottlenecks identified in the review. These optimizations focus on reducing memory footprint, preventing lazy-loading, and ensuring data type resilience.
1. Fix the N+1 Query Risk (Eager Loading)
1. Fix the N+1 Query Risk (Eager Loading)
Your
checkCategoryId
and
checkStageId
methods call
$activity->getCategory()
and
$activity->getStage()
. If these relationships aren't eager-loaded, Laravel will execute a new database query for every check inside the loop.
Suggestion:
Add
category
and
stage
to the initial eager-load array.
PHP
Download code
Copy code
// Before (Line 38)
$activity
= Activity::with([
'user.group'
])->uuid(
$this
->activityUuid,
false
)->firstOrFail();
// After
$activity
= Activity::with([
'user.group'
,
'category'
,
'stage'
])->uuid(
$this
->activityUuid,
false
)->firstOrFail();
2. Drastically Reduce Memory Usage
2. Drastically Reduce Memory Usage
Currently, you are hydrating full Eloquent
User
models into memory just to extract their IDs. If a team has hundreds or thousands of users, this will spike memory usage and potentially crash the worker.
Suggestion:
Use the relationship query builder to perform the
pluck
directly at the database level, bypassing Eloquent model hydration entirely.
PHP
Download code
Copy code
// Before (Lines 39-41)
$team
= Team::with([
'users'
])->findOrFail(
$activity
->user->team_id);
$usersIds
=
$team
->users->pluck(
'id'
)->toArray();
// After (No need to eager load 'users' on the Team model anymore)
$team
= Team::findOrFail(
$activity
->user->team_id);
$usersIds
=
$team
->users()->pluck(
'users.id'
)->toArray();
// Note the `()` after users
3. Harden Type Comparisons
3. Harden Type Comparisons
Since Elasticsearch and databases often return IDs or filter values as strings, strict comparison (
===
) against an Eloquent model's attribute (which might be cast to an integer) can cause false negatives.
Suggestion:
Cast your values before comparison, or use loose equality (
==
) if you are absolutely certain of the payload structure.
PHP
Download code
Copy code
// Example for checkChannelId (Lines 132-135)
private
function...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.24700798,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.26030585,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"bounds":{"left":0.24700798,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"bounds":{"left":0.26030585,"top":0.09577015,"width":0.4644282,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.24700798,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.26030585,"top":0.12849163,"width":0.10721409,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app","depth":4,"bounds":{"left":0.24700798,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app","depth":5,"bounds":{"left":0.26030585,"top":0.16121309,"width":0.17037898,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Illuminate\\Queue\\MaxAttemptsExceededException: Jiminny\\Jobs\\Activity\\DeleteTeamChurnData has been attempted too many times. — jiminny — app","depth":4,"bounds":{"left":0.24700798,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Illuminate\\Queue\\MaxAttemptsExceededException: Jiminny\\Jobs\\Activity\\DeleteTeamChurnData has been attempted too many times. — jiminny — app","depth":5,"bounds":{"left":0.26030585,"top":0.19393456,"width":0.2606383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app","depth":4,"bounds":{"left":0.24700798,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app","depth":5,"bounds":{"left":0.26030585,"top":0.22665602,"width":0.18899602,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.31432846,"top":0.22266561,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Userpilot | Ask Jiminny Report Generated","depth":4,"bounds":{"left":0.24700798,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Userpilot | Ask Jiminny Report Generated","depth":5,"bounds":{"left":0.26030585,"top":0.25937748,"width":0.07164229,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":4,"bounds":{"left":0.24700798,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":5,"bounds":{"left":0.26030585,"top":0.29209897,"width":0.19331782,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Problem loading page","depth":4,"bounds":{"left":0.24700798,"top":0.31364724,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Problem loading page","depth":5,"bounds":{"left":0.26030585,"top":0.32482043,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Search the CRM - HubSpot docs","depth":4,"bounds":{"left":0.24700798,"top":0.3463687,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search the CRM - HubSpot docs","depth":5,"bounds":{"left":0.26030585,"top":0.3575419,"width":0.05651596,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.24700798,"top":0.3790902,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.26030585,"top":0.39026338,"width":0.013131649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.24700798,"top":0.41181165,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.26030585,"top":0.42298484,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.24700798,"top":0.4445331,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.26030585,"top":0.4557063,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Dashboards | Datadog","depth":4,"bounds":{"left":0.24700798,"top":0.4772546,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dashboards | Datadog","depth":5,"bounds":{"left":0.26030585,"top":0.4884278,"width":0.03856383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"AI Features | Datadog","depth":4,"bounds":{"left":0.24700798,"top":0.509976,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AI Features | Datadog","depth":5,"bounds":{"left":0.26030585,"top":0.5211492,"width":0.037400264,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20493 smart instant nudge pre filtering by nikolaybiaivanov · Pull Request #12053 · jiminny/app","depth":4,"bounds":{"left":0.24700798,"top":0.54269755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20493 smart instant nudge pre filtering by nikolaybiaivanov · Pull Request #12053 · jiminny/app","depth":5,"bounds":{"left":0.26030585,"top":0.55387074,"width":0.17037898,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.24983378,"top":0.57701516,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.24983378,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.26080453,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.27194148,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.28307846,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.2942154,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"bounds":{"left":0.43168217,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"bounds":{"left":0.44365028,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.4409907,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"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.33061835,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Chat","depth":12,"bounds":{"left":0.41306517,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"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.42636302,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"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.32629654,"top":0.14764565,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.32629654,"top":0.15003991,"width":0.1200133,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"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 20493 smart instant nudge pre filtering by niko</tabTitle>” with “<selection>@@ -4,16 +4,17 @@445namespace Jiminny\\Component\\Nudge\\Job;5namespace Jiminny\\Component\\Nudge\\Job;667+use Carbon\\Carbon;7use Illuminate\\Bus\\Queueable;8use Illuminate\\Bus\\Queueable;8use Illuminate\\Contracts\\Queue\\ShouldQueue;9use Illuminate\\Contracts\\Queue\\ShouldQueue;9-use Illuminate\\Database\\Eloquent\\Builder;10use Illuminate\\Foundation\\Bus\\Dispatchable;10use Illuminate\\Foundation\\Bus\\Dispatchable;11use Illuminate\\Queue\\InteractsWithQueue;11use Illuminate\\Queue\\InteractsWithQueue;12use Illuminate\\Queue\\SerializesModels;12use Illuminate\\Queue\\SerializesModels;13use Illuminate\\Support\\Facades\\Log;13use Illuminate\\Support\\Facades\\Log;14use Jiminny\\Component\\Queue\\Constants;14use Jiminny\\Component\\Queue\\Constants;15use Jiminny\\Models\\Activity;15use Jiminny\\Models\\Activity;16use Jiminny\\Models\\Activity\\Search;16use Jiminny\\Models\\Activity\\Search;17+use Jiminny\\Models\\Activity\\SearchFilter;17use Jiminny\\Models\\Nudge;18use Jiminny\\Models\\Nudge;18use Jiminny\\Models\\Team;19use Jiminny\\Models\\Team;1920@@ -34,37 +35,201 @@343535public function handle(): void36public function handle(): void36 {37 {37-/** @var Activity $activity */38+$activity = Activity::with(['user.group'])->uuid($this->activityUuid, false)->firstOrFail();38-$activity = Activity::with(['user'])->uuid($this->activityUuid, false)->firstOrFail();39-40-/** @var Team $team */41$team = Team::with(['users'])->findOrFail($activity->user->team_id);39$team = Team::with(['users'])->findOrFail($activity->user->team_id);424043- Log::info(__METHOD__ . " Running for team $team->id.", [44-'activity_id' => $activity->id,45-'activity_uuid' => $this->activityUuid,46-'team_id' => $team->id,47- ]);48-49$usersIds = $team->users->pluck('id')->toArray();41$usersIds = $team->users->pluck('id')->toArray();504251-$searchesWithImmediateNudges = Activity\\Search::with(['nudges'])43+$searchesWithImmediateNudges = Activity\\Search::with([44+'nudges' => fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY),45+'filters',46+ ])52 ->whereIn('user_id', $usersIds)47 ->whereIn('user_id', $usersIds)53- ->whereHas('nudges', function (Builder $query) {48+ ->whereHas('nudges', fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY))54-$query->where('frequency', Nudge::FREQ_INSTANTLY);49+ ->get();55- })->get();50+51+$totalSearches = $searchesWithImmediateNudges->count();52+$skippedCount = 0;53+54+$searchesWithImmediateNudges->each(function (Search $search) use ($activity, &$skippedCount): void {55+$matchResult = $this->activityMightMatchSearch($activity, $search);565657-$searchesWithImmediateNudges->each(function (Search $search): void {57+if (! $matchResult['matches']) {58-$search->nudges->each(function (Nudge $nudge): void {58+$skippedCount++;59-// Filter only nudges that are set to be sent instantly59+ Log::info('Pre-filter skipped nudge dispatch', [60-if ($nudge->frequency === Nudge::FREQ_INSTANTLY) {60+'activity_uuid' => $activity->getUuid(),61- Log::info("Dispatching ProcessNudgeSearchJob for nudge $nudge->id.");61+'search_id' => $search->getId(),62+'mismatched_filter' => $matchResult['mismatch_reason'],63+'filter_value' => $matchResult['filter_value'],64+ ]);626563- ProcessNudgeSearchJob::dispatch($nudge);66+return;67+ }646865- Log::info("ProcessNudgeSearchJob dispatched for nudge $nudge->id.");69+$search->nudges->each(fn ($nudge) => ProcessNudgeSearchJob::dispatch($nudge));66- }67- });68 });70 });71+72+if ($totalSearches > 0) {73+ Log::info('Nudge pre-filter results', [74+'activity_uuid' => $activity->getUuid(),75+'total_searches' => $totalSearches,76+'skipped' => $skippedCount,77+'dispatched' => $totalSearches - $skippedCount,78+'skip_rate' => round(($skippedCount / $totalSearches) * 100, 2) . '%',79+ ]);80+ }81+ }82+83+private function activityMightMatchSearch(Activity $activity, Search $search): array84+ {85+foreach ($search->filters as $filter) {86+$filterName = $filter->getFilterProperty();87+88+$result = match ($filterName) {89+'group_id' => $this->checkGroupId($activity, $filter),90+'user_id' => $this->checkUserId($activity, $filter),91+'channel_id' => $this->checkChannelId($activity, $filter),92+'provider_id' => $this->checkProviderId($activity, $filter),93+'category_id' => $this->checkCategoryId($activity, $filter),94+'min_duration' => $this->checkMinDuration($activity, $filter),95+'max_duration' => $this->checkMaxDuration($activity, $filter),96+'not_logged' => $this->checkNotLogged($activity, $filter),97+'only_recorded' => $this->checkOnlyRecorded($activity, $filter),98+'languages' => $this->checkLanguages($activity, $filter),99+'stage_id' => $this->checkStageId($activity, $filter),100+'start_date' => $this->checkStartDate($activity, $filter),101+'end_date' => $this->checkEndDate($activity, $filter),102+default => null, // Unknown filter - can't pre-check, assume might match103+ };104+105+if ($result === false) {106+return [107+'matches' => false,108+'mismatch_reason' => $filterName,109+'filter_value' => $filter->getFilterValue(),110+ ];111+ }112+ }113+114+return ['matches' => true];115+ }116+117+private function checkGroupId(Activity $activity, SearchFilter $filter): ?bool118+ {119+$groupUuid = $activity->user->getGroup()?->getUuid();120+if ($groupUuid === null) {121+return null;122+ }123+124+return $filter->getFilterValue() === $groupUuid ? null : false;125+ }126+127+private function checkUserId(Activity $activity, SearchFilter $filter): ?bool128+ {129+return $filter->getFilterValue() === $activity->user->getUuid() ? null : false;130+ }131+132+private function checkChannelId(Activity $activity, SearchFilter $filter): ?bool133+ {134+return $filter->getFilterValue() === $activity->getType() ? null : false;135+ }136+137+private function checkProviderId(Activity $activity, SearchFilter $filter): ?bool138+ {139+return $filter->getFilterValue() === $activity->getProvider() ? null : false;140+ }141+142+private function checkCategoryId(Activity $activity, SearchFilter $filter): ?bool143+ {144+$categoryId = $activity->getCategory()?->getUuid();145+if ($categoryId === null) {146+return null;147+ }148+149+return $filter->getFilterValue() === $categoryId ? null : false;150+ }151+152+private function checkMinDuration(Activity $activity, SearchFilter $filter): ?bool153+ {154+return $activity->getDuration() >= (float) $filter->getFilterValue() ? null : false;155+ }156+157+private function checkMaxDuration(Activity $activity, SearchFilter $filter): ?bool158+ {159+return $activity->getDuration() <= (float) $filter->getFilterValue() ? null : false;160+ }161+162+private function checkNotLogged(Activity $activity, SearchFilter $filter): ?bool163+ {164+if (! $filter->getFilterValue()) {165+return null;166+ }167+168+$isLogged = $activity->getCrmProviderId() !== null;169+$isInternal = $activity->isInternal();170+171+return (! $isLogged || $isInternal) ? null : false;172+ }173+174+private function checkOnlyRecorded(Activity $activity, SearchFilter $filter): ?bool175+ {176+$filterValue = (int) $filter->getFilterValue();177+$hasRecording = $activity->recording_state !== Activity::RECORDING_OFF;178+179+return match ($filterValue) {180+1 => $hasRecording ? null : false, // Only recorded181+2 => ! $hasRecording ? null : false, // Only non-recorded182+default => null,183+ };184+ }185+186+private function checkStageId(Activity $activity, SearchFilter $filter): ?bool187+ {188+$stageId = $activity->getStage()?->getUuid();189+if ($stageId === null) {190+return null; // No stage, let ES handle191+ }192+193+return $filter->getFilterValue() === $stageId ? null : false;194+ }195+196+private function checkStartDate(Activity $activity, SearchFilter $filter): ?bool197+ {198+$startTime = $activity->getActualStartTime();199+if ($startTime === null) {200+return null;201+ }202+203+$filterDate = Carbon::parse($filter->getFilterValue());204+205+return $startTime->gte($filterDate) ? null : false;206+ }207+208+private function checkEndDate(Activity $activity, SearchFilter $filter): ?bool209+ {210+$endTime = $activity->getActualEndTime();211+if ($endTime === null) {212+return null;213+ }214+215+$filterDate = Carbon::parse($filter->getFilterValue())->endOfDay();216+217+return $endTime->lte($filterDate) ? null : false;218+ }219+220+private function checkLanguages(Activity $activity, SearchFilter $filter): ?bool221+ {222+$activityLanguage = $activity->getLanguageCode();223+if ($activityLanguage === null) {224+return null;225+ }226+227+// Filter values are always base language codes (e.g., 'en', 'fr').228+// Extract base code from activity locale (e.g., en_GB -> en) to match ES query behavior.229+// See LanguageFilterDefinition::getQueries() which uses regex: $language . '_[a-z]{2}'230+$activityLangCode = explode('_', $activityLanguage)[0];231+$filterLanguage = $filter->getFilterValue();232+233+return $activityLangCode === $filterLanguage ? null : false;69 }234 }70}235}</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,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>Jy 20493 smart instant nudge pre filtering by niko</tabTitle>” with “<selection>@@ -4,16 +4,17 @@445namespace Jiminny\\Component\\Nudge\\Job;5namespace Jiminny\\Component\\Nudge\\Job;667+use Carbon\\Carbon;7use Illuminate\\Bus\\Queueable;8use Illuminate\\Bus\\Queueable;8use Illuminate\\Contracts\\Queue\\ShouldQueue;9use Illuminate\\Contracts\\Queue\\ShouldQueue;9-use Illuminate\\Database\\Eloquent\\Builder;10use Illuminate\\Foundation\\Bus\\Dispatchable;10use Illuminate\\Foundation\\Bus\\Dispatchable;11use Illuminate\\Queue\\InteractsWithQueue;11use Illuminate\\Queue\\InteractsWithQueue;12use Illuminate\\Queue\\SerializesModels;12use Illuminate\\Queue\\SerializesModels;13use Illuminate\\Support\\Facades\\Log;13use Illuminate\\Support\\Facades\\Log;14use Jiminny\\Component\\Queue\\Constants;14use Jiminny\\Component\\Queue\\Constants;15use Jiminny\\Models\\Activity;15use Jiminny\\Models\\Activity;16use Jiminny\\Models\\Activity\\Search;16use Jiminny\\Models\\Activity\\Search;17+use Jiminny\\Models\\Activity\\SearchFilter;17use Jiminny\\Models\\Nudge;18use Jiminny\\Models\\Nudge;18use Jiminny\\Models\\Team;19use Jiminny\\Models\\Team;1920@@ -34,37 +35,201 @@343535public function handle(): void36public function handle(): void36 {37 {37-/** @var Activity $activity */38+$activity = Activity::with(['user.group'])->uuid($this->activityUuid, false)->firstOrFail();38-$activity = Activity::with(['user'])->uuid($this->activityUuid, false)->firstOrFail();39-40-/** @var Team $team */41$team = Team::with(['users'])->findOrFail($activity->user->team_id);39$team = Team::with(['users'])->findOrFail($activity->user->team_id);424043- Log::info(__METHOD__ . " Running for team $team->id.", [44-'activity_id' => $activity->id,45-'activity_uuid' => $this->activityUuid,46-'team_id' => $team->id,47- ]);48-49$usersIds = $team->users->pluck('id')->toArray();41$usersIds = $team->users->pluck('id')->toArray();504251-$searchesWithImmediateNudges = Activity\\Search::with(['nudges'])43+$searchesWithImmediateNudges = Activity\\Search::with([44+'nudges' => fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY),45+'filters',46+ ])52 ->whereIn('user_id', $usersIds)47 ->whereIn('user_id', $usersIds)53- ->whereHas('nudges', function (Builder $query) {48+ ->whereHas('nudges', fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY))54-$query->where('frequency', Nudge::FREQ_INSTANTLY);49+ ->get();55- })->get();50+51+$totalSearches = $searchesWithImmediateNudges->count();52+$skippedCount = 0;53+54+$searchesWithImmediateNudges->each(function (Search $search) use ($activity, &$skippedCount): void {55+$matchResult = $this->activityMightMatchSearch($activity, $search);565657-$searchesWithImmediateNudges->each(function (Search $search): void {57+if (! $matchResult['matches']) {58-$search->nudges->each(function (Nudge $nudge): void {58+$skippedCount++;59-// Filter only nudges that are set to be sent instantly59+ Log::info('Pre-filter skipped nudge dispatch', [60-if ($nudge->frequency === Nudge::FREQ_INSTANTLY) {60+'activity_uuid' => $activity->getUuid(),61- Log::info("Dispatching ProcessNudgeSearchJob for nudge $nudge->id.");61+'search_id' => $search->getId(),62+'mismatched_filter' => $matchResult['mismatch_reason'],63+'filter_value' => $matchResult['filter_value'],64+ ]);626563- ProcessNudgeSearchJob::dispatch($nudge);66+return;67+ }646865- Log::info("ProcessNudgeSearchJob dispatched for nudge $nudge->id.");69+$search->nudges->each(fn ($nudge) => ProcessNudgeSearchJob::dispatch($nudge));66- }67- });68 });70 });71+72+if ($totalSearches > 0) {73+ Log::info('Nudge pre-filter results', [74+'activity_uuid' => $activity->getUuid(),75+'total_searches' => $totalSearches,76+'skipped' => $skippedCount,77+'dispatched' => $totalSearches - $skippedCount,78+'skip_rate' => round(($skippedCount / $totalSearches) * 100, 2) . '%',79+ ]);80+ }81+ }82+83+private function activityMightMatchSearch(Activity $activity, Search $search): array84+ {85+foreach ($search->filters as $filter) {86+$filterName = $filter->getFilterProperty();87+88+$result = match ($filterName) {89+'group_id' => $this->checkGroupId($activity, $filter),90+'user_id' => $this->checkUserId($activity, $filter),91+'channel_id' => $this->checkChannelId($activity, $filter),92+'provider_id' => $this->checkProviderId($activity, $filter),93+'category_id' => $this->checkCategoryId($activity, $filter),94+'min_duration' => $this->checkMinDuration($activity, $filter),95+'max_duration' => $this->checkMaxDuration($activity, $filter),96+'not_logged' => $this->checkNotLogged($activity, $filter),97+'only_recorded' => $this->checkOnlyRecorded($activity, $filter),98+'languages' => $this->checkLanguages($activity, $filter),99+'stage_id' => $this->checkStageId($activity, $filter),100+'start_date' => $this->checkStartDate($activity, $filter),101+'end_date' => $this->checkEndDate($activity, $filter),102+default => null, // Unknown filter - can't pre-check, assume might match103+ };104+105+if ($result === false) {106+return [107+'matches' => false,108+'mismatch_reason' => $filterName,109+'filter_value' => $filter->getFilterValue(),110+ ];111+ }112+ }113+114+return ['matches' => true];115+ }116+117+private function checkGroupId(Activity $activity, SearchFilter $filter): ?bool118+ {119+$groupUuid = $activity->user->getGroup()?->getUuid();120+if ($groupUuid === null) {121+return null;122+ }123+124+return $filter->getFilterValue() === $groupUuid ? null : false;125+ }126+127+private function checkUserId(Activity $activity, SearchFilter $filter): ?bool128+ {129+return $filter->getFilterValue() === $activity->user->getUuid() ? null : false;130+ }131+132+private function checkChannelId(Activity $activity, SearchFilter $filter): ?bool133+ {134+return $filter->getFilterValue() === $activity->getType() ? null : false;135+ }136+137+private function checkProviderId(Activity $activity, SearchFilter $filter): ?bool138+ {139+return $filter->getFilterValue() === $activity->getProvider() ? null : false;140+ }141+142+private function checkCategoryId(Activity $activity, SearchFilter $filter): ?bool143+ {144+$categoryId = $activity->getCategory()?->getUuid();145+if ($categoryId === null) {146+return null;147+ }148+149+return $filter->getFilterValue() === $categoryId ? null : false;150+ }151+152+private function checkMinDuration(Activity $activity, SearchFilter $filter): ?bool153+ {154+return $activity->getDuration() >= (float) $filter->getFilterValue() ? null : false;155+ }156+157+private function checkMaxDuration(Activity $activity, SearchFilter $filter): ?bool158+ {159+return $activity->getDuration() <= (float) $filter->getFilterValue() ? null : false;160+ }161+162+private function checkNotLogged(Activity $activity, SearchFilter $filter): ?bool163+ {164+if (! $filter->getFilterValue()) {165+return null;166+ }167+168+$isLogged = $activity->getCrmProviderId() !== null;169+$isInternal = $activity->isInternal();170+171+return (! $isLogged || $isInternal) ? null : false;172+ }173+174+private function checkOnlyRecorded(Activity $activity, SearchFilter $filter): ?bool175+ {176+$filterValue = (int) $filter->getFilterValue();177+$hasRecording = $activity->recording_state !== Activity::RECORDING_OFF;178+179+return match ($filterValue) {180+1 => $hasRecording ? null : false, // Only recorded181+2 => ! $hasRecording ? null : false, // Only non-recorded182+default => null,183+ };184+ }185+186+private function checkStageId(Activity $activity, SearchFilter $filter): ?bool187+ {188+$stageId = $activity->getStage()?->getUuid();189+if ($stageId === null) {190+return null; // No stage, let ES handle191+ }192+193+return $filter->getFilterValue() === $stageId ? null : false;194+ }195+196+private function checkStartDate(Activity $activity, SearchFilter $filter): ?bool197+ {198+$startTime = $activity->getActualStartTime();199+if ($startTime === null) {200+return null;201+ }202+203+$filterDate = Carbon::parse($filter->getFilterValue());204+205+return $startTime->gte($filterDate) ? null : false;206+ }207+208+private function checkEndDate(Activity $activity, SearchFilter $filter): ?bool209+ {210+$endTime = $activity->getActualEndTime();211+if ($endTime === null) {212+return null;213+ }214+215+$filterDate = Carbon::parse($filter->getFilterValue())->endOfDay();216+217+return $endTime->lte($filterDate) ? null : false;218+ }219+220+private function checkLanguages(Activity $activity, SearchFilter $filter): ?bool221+ {222+$activityLanguage = $activity->getLanguageCode();223+if ($activityLanguage === null) {224+return null;225+ }226+227+// Filter values are always base language codes (e.g., 'en', 'fr').228+// Extract base code from activity locale (e.g., en_GB -> en) to match ES query behavior.229+// See LanguageFilterDefinition::getQueries() which uses regex: $language . '_[a-z]{2}'230+$activityLangCode = explode('_', $activityLanguage)[0];231+$filterLanguage = $filter->getFilterValue();232+233+return $activityLangCode === $filterLanguage ? null : false;69 }234 }70}235}</selection>” selected.","depth":23,"on_screen":true,"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,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This code selection introduces a","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"pre-filtering mechanism","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to the","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny\\Component\\Nudge\\Job","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"namespace. The primary goal is to optimize performance by validating an activity against search criteria in-memory before dispatching costly background jobs.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Core Functionality Changes","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Core Functionality Changes","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Selective Loading:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"handle()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method now eager-loads","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"user.group","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for activities and specifically filters for","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FREQ_INSTANTLY","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"nudges and their associated search filters.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pre-Dispatch Validation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instead of dispatching jobs for every instant nudge, the system now calls","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activityMightMatchSearch()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short-Circuiting:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If an activity fails a pre-filter check (e.g., mismatched user ID or duration), the job dispatch is skipped, and the event is logged with the specific mismatch reason.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Performance Metrics:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Adds summary logging at the end of the process to track:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Total searches processed.","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of skipped dispatches.","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The \"Skip Rate\" percentage.","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Implemented Filter Checks","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Implemented Filter Checks","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The logic includes a","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"match","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"expression to validate various activity attributes against","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SearchFilter","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"values:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Identity & Metadata:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Matches for","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"group_id","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"user_id","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"channel_id","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"provider_id","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Temporal & Duration:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"* Validates","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"min_duration","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"max_duration","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Checks","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"start_date","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"end_date","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"using Carbon parsing.","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity State:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Logging:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Determines if an activity is logged to a CRM or is internal via","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"checkNotLogged","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recording:","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Uses","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"checkOnlyRecorded","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to filter based on whether a recording exists.","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Categorization:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Checks for","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"category_id","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"stage_id","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"languages","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Note:","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The language check specifically extracts base codes (e.g.,","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"en","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"en_GB","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to align with Elasticsearch behavior.","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Logic Design","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Logic Design","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nullable Returns:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Filter methods return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"null","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if a match is possible (or cannot be determined), and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"only when a definitive mismatch is found.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Safe Fallback:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If a filter type is unknown (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"default","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"), the system assumes a match and proceeds to dispatch, ensuring no false negatives.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said what is the logic behind diff. Act as code reviewer. First review the changes then explain it and then evaluate. Try to find potential issues and bottlenecks","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"what is the logic behind diff. Act as code reviewer. First review the changes then explain it and then evaluate. Try to find potential issues and bottlenecks","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":20,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a review of the changes provided in the diff, broken down by your requested structure.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Review of Changes","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Review of Changes","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This PR refactors the","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ProcessNudgeSearchJob","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"dispatching mechanism within the","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"handle()","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Query Optimization:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Eager loads necessary relationships (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"user.group","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"filters","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") and scopes the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"nudges","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"relationship at the database level to only fetch","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FREQ_INSTANTLY","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"records.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In-Memory Filtering:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduces a pre-filtering mechanism (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activityMightMatchSearch","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") that checks the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"against","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SearchFilter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"criteria before deciding to dispatch a job.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Helper Methods:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Adds 13 private","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"check*","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"methods to handle the specific comparison logic for different filter types (e.g., duration, dates, categories, stages).","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Observability:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Adds structured logging to record exactly why a nudge was skipped and outputs a summary report (total, skipped, dispatched, skip rate) at the end of the execution.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Explanation of Logic","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Explanation of Logic","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The core philosophy of this change is","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"veto-based short-circuiting\"","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Previously, the job fetched all searches with instant nudges for a team's users and blindly dispatched a queue job for every single one. The heavy lifting of deciding if the activity actually matched the search was likely deferred to the queue worker and Elasticsearch.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Now, the code evaluates the filters in the current process:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"It iterates through each","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and its associated","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SearchFilter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"s.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"It routes the filter to a specific","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"check*","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method using a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"match","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"expression based on the filter's property name.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Veto:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"check*","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"methods are designed to return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"only if there is an absolute mismatch","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(e.g., the filter requires a minimum duration of 10, but the activity is 5).","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Pass:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the filter matches, or if the activity lacks the data needed to make a firm decision (e.g., no stage is assigned, or the filter type is unrecognized), the method returns","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"null","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". This acts as a pass, delegating the final strict evaluation to Elasticsearch later in the pipeline.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If any filter returns","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", the search is skipped, saving a queue dispatch.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Evaluation","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Evaluation","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Overall, this is a","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"highly effective performance optimization","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pros:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"It significantly reduces queue bloat. By filtering out obvious mismatches in-memory, you save the overhead of serializing, dispatching, picking up, and processing jobs that are destined to fail or do nothing. The use of","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"match","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"makes the routing exceptionally clean, and the nullable return design is a smart way to avoid false negatives.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cons/Trade-offs:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You are trading background queue worker time for a slight increase in synchronous memory and CPU usage on the current job. However, queue I/O is almost always more expensive than simple in-memory comparisons, making this a worthwhile trade.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Potential Issues & Bottlenecks","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Potential Issues & Bottlenecks","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"While the logic is sound, there are a few architectural bottlenecks and risks introduced or maintained in this diff:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Potential N+1 Query / Lazy Loading Issues:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"handle","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method, the activity is loaded with","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity::with(['user.group'])","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". However, inside your new","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"check*","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"methods, you are calling:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity->getCategory()?->getUuid()","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity->getStage()?->getUuid()","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"category","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"stage","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"are Eloquent relationships and are not eager-loaded on the original","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"model, calling these methods inside a loop of","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$totalSearches","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"will trigger lazy-loaded database queries.","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fix:","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Update line 38 to:","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity = Activity::with(['user.group', 'category', 'stage'])->...","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Massive Memory Consumption (Pre-existing but critical):","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lines 39-41:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PHP","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Download code","depth":27,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy code","depth":27,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"$team","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"= Team::with([","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'users'","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"])->findOrFail(","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->user->team_id);","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$usersIds","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"=","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$team","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->users->pluck(","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'id'","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")->toArray();","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If a team has thousands of users,","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Team::with(['users'])","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"hydrates thousands of full Eloquent User models into memory just to extract their IDs.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fix:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Bypass hydrating the models entirely by querying the relationship directly:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$usersIds = $team->users()->pluck('id')->toArray();","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repeated Carbon Parsing in Loops:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"checkStartDate","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"checkEndDate","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", you parse the filter date:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Carbon::parse($filter->getFilterValue())","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". If the same date filter applies to multiple searches, Carbon is being instantiated repeatedly in the loop. While Carbon is relatively fast, doing this hundreds of times adds unnecessary CPU cycles.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fix:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This is a minor nitpick, but if performance is the absolute goal, you could memoize/cache the parsed filter values within the job.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Loose Type Comparisons:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In methods like","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"checkChannelId","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"checkLanguages","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", you are using strict equality (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"===","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"). Ensure that","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$filter->getFilterValue()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(which is typically returned as a string from a database payload) matches the exact type returned by","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity->getType()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activityLangCode","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". If one is an integer","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and the other is a string","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"1\"","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", the strict check will return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", incorrectly preventing the nudge from sending.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"bounds":{"left":0.3332779,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"bounds":{"left":0.34391624,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"bounds":{"left":0.35455453,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"bounds":{"left":0.36519283,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"bounds":{"left":0.37583113,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":21,"bounds":{"left":0.3492354,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"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.36386302,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said what would be your suggestion?","depth":21,"bounds":{"left":0.38380983,"top":0.0,"width":0.065159574,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"bounds":{"left":0.32629654,"top":0.0,"width":0.019946808,"height":0.016360734},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"what would be your suggestion?","depth":23,"bounds":{"left":0.38380983,"top":0.0,"width":0.04720745,"height":0.035514764},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Listen","depth":22,"bounds":{"left":0.4409907,"top":0.05586592,"width":0.013297873,"height":0.031923383},"on_screen":true,"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.4409907,"top":0.05027933,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":25,"bounds":{"left":0.34990028,"top":0.058260176,"width":0.030917553,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"bounds":{"left":0.34757313,"top":0.09976058,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"bounds":{"left":0.34757313,"top":0.10175578,"width":0.04105718,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here are actionable suggestions to address the potential issues and bottlenecks identified in the review. These optimizations focus on reducing memory footprint, preventing lazy-loading, and ensuring data type resilience.","depth":24,"bounds":{"left":0.3366024,"top":0.10295291,"width":0.11502659,"height":0.09936153},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Fix the N+1 Query Risk (Eager Loading)","depth":23,"bounds":{"left":0.3366024,"top":0.22665602,"width":0.11502659,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Fix the N+1 Query Risk (Eager Loading)","depth":24,"bounds":{"left":0.3366024,"top":0.22825219,"width":0.10555186,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Your","depth":24,"bounds":{"left":0.3366024,"top":0.254589,"width":0.011968086,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"checkCategoryId","depth":25,"bounds":{"left":0.35056517,"top":0.25578612,"width":0.041888297,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":24,"bounds":{"left":0.39444813,"top":0.254589,"width":0.011968086,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"checkStageId","depth":25,"bounds":{"left":0.4084109,"top":0.25578612,"width":0.033410903,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"methods call","depth":24,"bounds":{"left":0.3366024,"top":0.254589,"width":0.1087101,"height":0.037110932},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity->getCategory()","depth":25,"bounds":{"left":0.37084442,"top":0.27653632,"width":0.06698803,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":24,"bounds":{"left":0.4398271,"top":0.2753392,"width":0.011801862,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity->getStage()","depth":25,"bounds":{"left":0.3385971,"top":0.2972865,"width":0.05867686,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". If these relationships aren't eager-loaded, Laravel will execute a new database query for every check inside the loop.","depth":24,"bounds":{"left":0.3366024,"top":0.29608938,"width":0.1143617,"height":0.07861133},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Suggestion:","depth":24,"bounds":{"left":0.3366024,"top":0.38786912,"width":0.030585106,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Add","depth":24,"bounds":{"left":0.3671875,"top":0.38786912,"width":0.012300532,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"category","depth":25,"bounds":{"left":0.38148272,"top":0.38906625,"width":0.02244016,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":24,"bounds":{"left":0.40591756,"top":0.38786912,"width":0.011801862,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"stage","depth":25,"bounds":{"left":0.4197141,"top":0.38906625,"width":0.013962766,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to the initial eager-load array.","depth":24,"bounds":{"left":0.3366024,"top":0.38786912,"width":0.11502659,"height":0.037110932},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PHP","depth":25,"bounds":{"left":0.34192154,"top":0.4517159,"width":0.009142287,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Download code","depth":25,"bounds":{"left":0.42237368,"top":0.44293696,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy code","depth":25,"bounds":{"left":0.43567154,"top":0.44293696,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"// Before (Line 38)","depth":25,"bounds":{"left":0.34192154,"top":0.49361533,"width":0.053025264,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity","depth":25,"bounds":{"left":0.34192154,"top":0.5103751,"width":0.025099734,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"= Activity::with([","depth":25,"bounds":{"left":0.36702126,"top":0.5103751,"width":0.053025264,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'user.group'","depth":25,"bounds":{"left":0.42004654,"top":0.5103751,"width":0.03357713,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"])->uuid(","depth":25,"bounds":{"left":0.45362368,"top":0.5103751,"width":0.025099734,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$this","depth":25,"bounds":{"left":0.4787234,"top":0.5103751,"width":0.013962766,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->activityUuid,","depth":25,"bounds":{"left":0.49268618,"top":0.5103751,"width":0.044714097,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":25,"bounds":{"left":0.53740025,"top":0.5103751,"width":0.013962766,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")->firstOrFail();","depth":25,"bounds":{"left":0.55136305,"top":0.5103751,"width":0.047539894,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"// After","depth":25,"bounds":{"left":0.34192154,"top":0.54389465,"width":0.022273935,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity","depth":25,"bounds":{"left":0.34192154,"top":0.5606544,"width":0.025099734,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"= Activity::with([","depth":25,"bounds":{"left":0.36702126,"top":0.5606544,"width":0.053025264,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'user.group'","depth":25,"bounds":{"left":0.42004654,"top":0.5606544,"width":0.03357713,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":25,"bounds":{"left":0.45362368,"top":0.5606544,"width":0.0056515955,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'category'","depth":25,"bounds":{"left":0.45927528,"top":0.5606544,"width":0.027925532,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":25,"bounds":{"left":0.4872008,"top":0.5606544,"width":0.005485372,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'stage'","depth":25,"bounds":{"left":0.49268618,"top":0.5606544,"width":0.019614361,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"])->uuid(","depth":25,"bounds":{"left":0.51230055,"top":0.5606544,"width":0.025099734,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$this","depth":25,"bounds":{"left":0.53740025,"top":0.5606544,"width":0.013962766,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->activityUuid,","depth":25,"bounds":{"left":0.55136305,"top":0.5606544,"width":0.044714097,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":25,"bounds":{"left":0.59607714,"top":0.5606544,"width":0.013962766,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")->firstOrFail();","depth":25,"bounds":{"left":0.6100399,"top":0.5606544,"width":0.04737367,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Drastically Reduce Memory Usage","depth":23,"bounds":{"left":0.3366024,"top":0.6113328,"width":0.11502659,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Drastically Reduce Memory Usage","depth":24,"bounds":{"left":0.3366024,"top":0.612929,"width":0.094913565,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Currently, you are hydrating full Eloquent","depth":24,"bounds":{"left":0.3366024,"top":0.6392658,"width":0.099567816,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"User","depth":25,"bounds":{"left":0.4381649,"top":0.6404629,"width":0.011136968,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"models into memory just to extract their IDs. If a team has hundreds or thousands of users, this will spike memory usage and potentially crash the worker.","depth":24,"bounds":{"left":0.3366024,"top":0.6392658,"width":0.11502659,"height":0.09936153},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Suggestion:","depth":24,"bounds":{"left":0.3366024,"top":0.7517957,"width":0.030585106,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Use the relationship query builder to perform the","depth":24,"bounds":{"left":0.3366024,"top":0.7517957,"width":0.11486037,"height":0.037110932},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"pluck","depth":25,"bounds":{"left":0.37516624,"top":0.77374303,"width":0.013962766,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"directly at the database level, bypassing Eloquent model hydration entirely.","depth":24,"bounds":{"left":0.3366024,"top":0.7725459,"width":0.11486037,"height":0.057861134},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PHP","depth":25,"bounds":{"left":0.34192154,"top":0.85714287,"width":0.009142287,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Download code","depth":25,"bounds":{"left":0.42237368,"top":0.84836394,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy code","depth":25,"bounds":{"left":0.43567154,"top":0.84836394,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"// Before (Lines 39-41)","depth":25,"bounds":{"left":0.34192154,"top":0.8990423,"width":0.06416223,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$team","depth":25,"bounds":{"left":0.34192154,"top":0.91580206,"width":0.013962766,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"= Team::with([","depth":25,"bounds":{"left":0.3558843,"top":0.91580206,"width":0.041888297,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'users'","depth":25,"bounds":{"left":0.3977726,"top":0.91580206,"width":0.019614361,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"])->findOrFail(","depth":25,"bounds":{"left":0.41738698,"top":0.91580206,"width":0.041888297,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity","depth":25,"bounds":{"left":0.45927528,"top":0.91580206,"width":0.025099734,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->user->team_id);","depth":25,"bounds":{"left":0.484375,"top":0.91580206,"width":0.04737367,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$usersIds","depth":25,"bounds":{"left":0.34192154,"top":0.9325619,"width":0.025099734,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"=","depth":25,"bounds":{"left":0.36702126,"top":0.9325619,"width":0.008477394,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$team","depth":25,"bounds":{"left":0.37549868,"top":0.9325619,"width":0.013962766,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->users->pluck(","depth":25,"bounds":{"left":0.38946143,"top":0.9325619,"width":0.041888297,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'id'","depth":25,"bounds":{"left":0.43134972,"top":0.9325619,"width":0.011136968,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")->toArray();","depth":25,"bounds":{"left":0.4424867,"top":0.9325619,"width":0.036236703,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"// After (No need to eager load 'users' on the Team model anymore)","depth":25,"bounds":{"left":0.34192154,"top":0.9660814,"width":0.18434176,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$team","depth":25,"bounds":{"left":0.34192154,"top":0.9828412,"width":0.013962766,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"= Team::findOrFail(","depth":25,"bounds":{"left":0.3558843,"top":0.9828412,"width":0.055851065,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity","depth":25,"bounds":{"left":0.4117354,"top":0.9828412,"width":0.025099734,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->user->team_id);","depth":25,"bounds":{"left":0.4368351,"top":0.9828412,"width":0.047539894,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$usersIds","depth":25,"bounds":{"left":0.34192154,"top":0.99960095,"width":0.025099734,"height":0.0003990531},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"=","depth":25,"bounds":{"left":0.36702126,"top":0.99960095,"width":0.008477394,"height":0.0003990531},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$team","depth":25,"bounds":{"left":0.37549868,"top":0.99960095,"width":0.013962766,"height":0.0003990531},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->users()->pluck(","depth":25,"bounds":{"left":0.38946143,"top":0.99960095,"width":0.04737367,"height":0.0003990531},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'users.id'","depth":25,"bounds":{"left":0.4368351,"top":0.99960095,"width":0.027925532,"height":0.0003990531},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")->toArray();","depth":25,"bounds":{"left":0.46476063,"top":0.99960095,"width":0.0390625,"height":0.0003990531},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"// Note the `()` after users","depth":25,"bounds":{"left":0.50382316,"top":0.99960095,"width":0.07829122,"height":0.0003990531},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Harden Type Comparisons","depth":23,"bounds":{"left":0.3366024,"top":1.0,"width":0.11502659,"height":-0.05027938},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Harden Type Comparisons","depth":24,"bounds":{"left":0.3366024,"top":1.0,"width":0.07396942,"height":-0.051875472},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Since Elasticsearch and databases often return IDs or filter values as strings, strict comparison (","depth":24,"bounds":{"left":0.3366024,"top":1.0,"width":0.11502659,"height":-0.07821226},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"===","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") against an Eloquent model's attribute (which might be cast to an integer) can cause false negatives.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Suggestion:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cast your values before comparison, or use loose equality (","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"==","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") if you are absolutely certain of the payload structure.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PHP","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Download code","depth":25,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy code","depth":25,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"// Example for checkChannelId (Lines 132-135)","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"private","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"function","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8676700174437749351
|
6059967888930249027
|
click
|
accessibility
|
NULL
|
Platform Sprint 3 Q2 - Platform Team - Scrum Board Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -4,16 +4,17 @@445namespace Jiminny\Component\Nudge\Job;5namespace Jiminny\Component\Nudge\Job;667+use Carbon\Carbon;7use Illuminate\Bus\Queueable;8use Illuminate\Bus\Queueable;8use Illuminate\Contracts\Queue\ShouldQueue;9use Illuminate\Contracts\Queue\ShouldQueue;9-use Illuminate\Database\Eloquent\Builder;10use Illuminate\Foundation\Bus\Dispatchable;10use Illuminate\Foundation\Bus\Dispatchable;11use Illuminate\Queue\InteractsWithQueue;11use Illuminate\Queue\InteractsWithQueue;12use Illuminate\Queue\SerializesModels;12use Illuminate\Queue\SerializesModels;13use Illuminate\Support\Facades\Log;13use Illuminate\Support\Facades\Log;14use Jiminny\Component\Queue\Constants;14use Jiminny\Component\Queue\Constants;15use Jiminny\Models\Activity;15use Jiminny\Models\Activity;16use Jiminny\Models\Activity\Search;16use Jiminny\Models\Activity\Search;17+use Jiminny\Models\Activity\SearchFilter;17use Jiminny\Models\Nudge;18use Jiminny\Models\Nudge;18use Jiminny\Models\Team;19use Jiminny\Models\Team;1920@@ -34,37 +35,201 @@343535public function handle(): void36public function handle(): void36 {37 {37-/** @var Activity $activity */38+$activity = Activity::with(['user.group'])->uuid($this->activityUuid, false)->firstOrFail();38-$activity = Activity::with(['user'])->uuid($this->activityUuid, false)->firstOrFail();39-40-/** @var Team $team */41$team = Team::with(['users'])->findOrFail($activity->user->team_id);39$team = Team::with(['users'])->findOrFail($activity->user->team_id);424043- Log::info(__METHOD__ . " Running for team $team->id.", [44-'activity_id' => $activity->id,45-'activity_uuid' => $this->activityUuid,46-'team_id' => $team->id,47- ]);48-49$usersIds = $team->users->pluck('id')->toArray();41$usersIds = $team->users->pluck('id')->toArray();504251-$searchesWithImmediateNudges = Activity\Search::with(['nudges'])43+$searchesWithImmediateNudges = Activity\Search::with([44+'nudges' => fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY),45+'filters',46+ ])52 ->whereIn('user_id', $usersIds)47 ->whereIn('user_id', $usersIds)53- ->whereHas('nudges', function (Builder $query) {48+ ->whereHas('nudges', fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY))54-$query->where('frequency', Nudge::FREQ_INSTANTLY);49+ ->get();55- })->get();50+51+$totalSearches = $searchesWithImmediateNudges->count();52+$skippedCount = 0;53+54+$searchesWithImmediateNudges->each(function (Search $search) use ($activity, &$skippedCount): void {55+$matchResult = $this->activityMightMatchSearch($activity, $search);565657-$searchesWithImmediateNudges->each(function (Search $search): void {57+if (! $matchResult['matches']) {58-$search->nudges->each(function (Nudge $nudge): void {58+$skippedCount++;59-// Filter only nudges that are set to be sent instantly59+ Log::info('Pre-filter skipped nudge dispatch', [60-if ($nudge->frequency === Nudge::FREQ_INSTANTLY) {60+'activity_uuid' => $activity->getUuid(),61- Log::info("Dispatching ProcessNudgeSearchJob for nudge $nudge->id.");61+'search_id' => $search->getId(),62+'mismatched_filter' => $matchResult['mismatch_reason'],63+'filter_value' => $matchResult['filter_value'],64+ ]);626563- ProcessNudgeSearchJob::dispatch($nudge);66+return;67+ }646865- Log::info("ProcessNudgeSearchJob dispatched for nudge $nudge->id.");69+$search->nudges->each(fn ($nudge) => ProcessNudgeSearchJob::dispatch($nudge));66- }67- });68 });70 });71+72+if ($totalSearches > 0) {73+ Log::info('Nudge pre-filter results', [74+'activity_uuid' => $activity->getUuid(),75+'total_searches' => $totalSearches,76+'skipped' => $skippedCount,77+'dispatched' => $totalSearches - $skippedCount,78+'skip_rate' => round(($skippedCount / $totalSearches) * 100, 2) . '%',79+ ]);80+ }81+ }82+83+private function activityMightMatchSearch(Activity $activity, Search $search): array84+ {85+foreach ($search->filters as $filter) {86+$filterName = $filter->getFilterProperty();87+88+$result = match ($filterName) {89+'group_id' => $this->checkGroupId($activity, $filter),90+'user_id' => $this->checkUserId($activity, $filter),91+'channel_id' => $this->checkChannelId($activity, $filter),92+'provider_id' => $this->checkProviderId($activity, $filter),93+'category_id' => $this->checkCategoryId($activity, $filter),94+'min_duration' => $this->checkMinDuration($activity, $filter),95+'max_duration' => $this->checkMaxDuration($activity, $filter),96+'not_logged' => $this->checkNotLogged($activity, $filter),97+'only_recorded' => $this->checkOnlyRecorded($activity, $filter),98+'languages' => $this->checkLanguages($activity, $filter),99+'stage_id' => $this->checkStageId($activity, $filter),100+'start_date' => $this->checkStartDate($activity, $filter),101+'end_date' => $this->checkEndDate($activity, $filter),102+default => null, // Unknown filter - can't pre-check, assume might match103+ };104+105+if ($result === false) {106+return [107+'matches' => false,108+'mismatch_reason' => $filterName,109+'filter_value' => $filter->getFilterValue(),110+ ];111+ }112+ }113+114+return ['matches' => true];115+ }116+117+private function checkGroupId(Activity $activity, SearchFilter $filter): ?bool118+ {119+$groupUuid = $activity->user->getGroup()?->getUuid();120+if ($groupUuid === null) {121+return null;122+ }123+124+return $filter->getFilterValue() === $groupUuid ? null : false;125+ }126+127+private function checkUserId(Activity $activity, SearchFilter $filter): ?bool128+ {129+return $filter->getFilterValue() === $activity->user->getUuid() ? null : false;130+ }131+132+private function checkChannelId(Activity $activity, SearchFilter $filter): ?bool133+ {134+return $filter->getFilterValue() === $activity->getType() ? null : false;135+ }136+137+private function checkProviderId(Activity $activity, SearchFilter $filter): ?bool138+ {139+return $filter->getFilterValue() === $activity->getProvider() ? null : false;140+ }141+142+private function checkCategoryId(Activity $activity, SearchFilter $filter): ?bool143+ {144+$categoryId = $activity->getCategory()?->getUuid();145+if ($categoryId === null) {146+return null;147+ }148+149+return $filter->getFilterValue() === $categoryId ? null : false;150+ }151+152+private function checkMinDuration(Activity $activity, SearchFilter $filter): ?bool153+ {154+return $activity->getDuration() >= (float) $filter->getFilterValue() ? null : false;155+ }156+157+private function checkMaxDuration(Activity $activity, SearchFilter $filter): ?bool158+ {159+return $activity->getDuration() <= (float) $filter->getFilterValue() ? null : false;160+ }161+162+private function checkNotLogged(Activity $activity, SearchFilter $filter): ?bool163+ {164+if (! $filter->getFilterValue()) {165+return null;166+ }167+168+$isLogged = $activity->getCrmProviderId() !== null;169+$isInternal = $activity->isInternal();170+171+return (! $isLogged || $isInternal) ? null : false;172+ }173+174+private function checkOnlyRecorded(Activity $activity, SearchFilter $filter): ?bool175+ {176+$filterValue = (int) $filter->getFilterValue();177+$hasRecording = $activity->recording_state !== Activity::RECORDING_OFF;178+179+return match ($filterValue) {180+1 => $hasRecording ? null : false, // Only recorded181+2 => ! $hasRecording ? null : false, // Only non-recorded182+default => null,183+ };184+ }185+186+private function checkStageId(Activity $activity, SearchFilter $filter): ?bool187+ {188+$stageId = $activity->getStage()?->getUuid();189+if ($stageId === null) {190+return null; // No stage, let ES handle191+ }192+193+return $filter->getFilterValue() === $stageId ? null : false;194+ }195+196+private function checkStartDate(Activity $activity, SearchFilter $filter): ?bool197+ {198+$startTime = $activity->getActualStartTime();199+if ($startTime === null) {200+return null;201+ }202+203+$filterDate = Carbon::parse($filter->getFilterValue());204+205+return $startTime->gte($filterDate) ? null : false;206+ }207+208+private function checkEndDate(Activity $activity, SearchFilter $filter): ?bool209+ {210+$endTime = $activity->getActualEndTime();211+if ($endTime === null) {212+return null;213+ }214+215+$filterDate = Carbon::parse($filter->getFilterValue())->endOfDay();216+217+return $endTime->lte($filterDate) ? null : false;218+ }219+220+private function checkLanguages(Activity $activity, SearchFilter $filter): ?bool221+ {222+$activityLanguage = $activity->getLanguageCode();223+if ($activityLanguage === null) {224+return null;225+ }226+227+// Filter values are always base language codes (e.g., 'en', 'fr').228+// Extract base code from activity locale (e.g., en_GB -> en) to match ES query behavior.229+// See LanguageFilterDefinition::getQueries() which uses regex: $language . '_[a-z]{2}'230+$activityLangCode = explode('_', $activityLanguage)[0];231+$filterLanguage = $filter->getFilterValue();232+233+return $activityLangCode === $filterLanguage ? null : false;69 }234 }70}235}</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 20493 smart instant nudge pre filtering by niko</tabTitle>” with “<selection>@@ -4,16 +4,17 @@445namespace Jiminny\Component\Nudge\Job;5namespace Jiminny\Component\Nudge\Job;667+use Carbon\Carbon;7use Illuminate\Bus\Queueable;8use Illuminate\Bus\Queueable;8use Illuminate\Contracts\Queue\ShouldQueue;9use Illuminate\Contracts\Queue\ShouldQueue;9-use Illuminate\Database\Eloquent\Builder;10use Illuminate\Foundation\Bus\Dispatchable;10use Illuminate\Foundation\Bus\Dispatchable;11use Illuminate\Queue\InteractsWithQueue;11use Illuminate\Queue\InteractsWithQueue;12use Illuminate\Queue\SerializesModels;12use Illuminate\Queue\SerializesModels;13use Illuminate\Support\Facades\Log;13use Illuminate\Support\Facades\Log;14use Jiminny\Component\Queue\Constants;14use Jiminny\Component\Queue\Constants;15use Jiminny\Models\Activity;15use Jiminny\Models\Activity;16use Jiminny\Models\Activity\Search;16use Jiminny\Models\Activity\Search;17+use Jiminny\Models\Activity\SearchFilter;17use Jiminny\Models\Nudge;18use Jiminny\Models\Nudge;18use Jiminny\Models\Team;19use Jiminny\Models\Team;1920@@ -34,37 +35,201 @@343535public function handle(): void36public function handle(): void36 {37 {37-/** @var Activity $activity */38+$activity = Activity::with(['user.group'])->uuid($this->activityUuid, false)->firstOrFail();38-$activity = Activity::with(['user'])->uuid($this->activityUuid, false)->firstOrFail();39-40-/** @var Team $team */41$team = Team::with(['users'])->findOrFail($activity->user->team_id);39$team = Team::with(['users'])->findOrFail($activity->user->team_id);424043- Log::info(__METHOD__ . " Running for team $team->id.", [44-'activity_id' => $activity->id,45-'activity_uuid' => $this->activityUuid,46-'team_id' => $team->id,47- ]);48-49$usersIds = $team->users->pluck('id')->toArray();41$usersIds = $team->users->pluck('id')->toArray();504251-$searchesWithImmediateNudges = Activity\Search::with(['nudges'])43+$searchesWithImmediateNudges = Activity\Search::with([44+'nudges' => fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY),45+'filters',46+ ])52 ->whereIn('user_id', $usersIds)47 ->whereIn('user_id', $usersIds)53- ->whereHas('nudges', function (Builder $query) {48+ ->whereHas('nudges', fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY))54-$query->where('frequency', Nudge::FREQ_INSTANTLY);49+ ->get();55- })->get();50+51+$totalSearches = $searchesWithImmediateNudges->count();52+$skippedCount = 0;53+54+$searchesWithImmediateNudges->each(function (Search $search) use ($activity, &$skippedCount): void {55+$matchResult = $this->activityMightMatchSearch($activity, $search);565657-$searchesWithImmediateNudges->each(function (Search $search): void {57+if (! $matchResult['matches']) {58-$search->nudges->each(function (Nudge $nudge): void {58+$skippedCount++;59-// Filter only nudges that are set to be sent instantly59+ Log::info('Pre-filter skipped nudge dispatch', [60-if ($nudge->frequency === Nudge::FREQ_INSTANTLY) {60+'activity_uuid' => $activity->getUuid(),61- Log::info("Dispatching ProcessNudgeSearchJob for nudge $nudge->id.");61+'search_id' => $search->getId(),62+'mismatched_filter' => $matchResult['mismatch_reason'],63+'filter_value' => $matchResult['filter_value'],64+ ]);626563- ProcessNudgeSearchJob::dispatch($nudge);66+return;67+ }646865- Log::info("ProcessNudgeSearchJob dispatched for nudge $nudge->id.");69+$search->nudges->each(fn ($nudge) => ProcessNudgeSearchJob::dispatch($nudge));66- }67- });68 });70 });71+72+if ($totalSearches > 0) {73+ Log::info('Nudge pre-filter results', [74+'activity_uuid' => $activity->getUuid(),75+'total_searches' => $totalSearches,76+'skipped' => $skippedCount,77+'dispatched' => $totalSearches - $skippedCount,78+'skip_rate' => round(($skippedCount / $totalSearches) * 100, 2) . '%',79+ ]);80+ }81+ }82+83+private function activityMightMatchSearch(Activity $activity, Search $search): array84+ {85+foreach ($search->filters as $filter) {86+$filterName = $filter->getFilterProperty();87+88+$result = match ($filterName) {89+'group_id' => $this->checkGroupId($activity, $filter),90+'user_id' => $this->checkUserId($activity, $filter),91+'channel_id' => $this->checkChannelId($activity, $filter),92+'provider_id' => $this->checkProviderId($activity, $filter),93+'category_id' => $this->checkCategoryId($activity, $filter),94+'min_duration' => $this->checkMinDuration($activity, $filter),95+'max_duration' => $this->checkMaxDuration($activity, $filter),96+'not_logged' => $this->checkNotLogged($activity, $filter),97+'only_recorded' => $this->checkOnlyRecorded($activity, $filter),98+'languages' => $this->checkLanguages($activity, $filter),99+'stage_id' => $this->checkStageId($activity, $filter),100+'start_date' => $this->checkStartDate($activity, $filter),101+'end_date' => $this->checkEndDate($activity, $filter),102+default => null, // Unknown filter - can't pre-check, assume might match103+ };104+105+if ($result === false) {106+return [107+'matches' => false,108+'mismatch_reason' => $filterName,109+'filter_value' => $filter->getFilterValue(),110+ ];111+ }112+ }113+114+return ['matches' => true];115+ }116+117+private function checkGroupId(Activity $activity, SearchFilter $filter): ?bool118+ {119+$groupUuid = $activity->user->getGroup()?->getUuid();120+if ($groupUuid === null) {121+return null;122+ }123+124+return $filter->getFilterValue() === $groupUuid ? null : false;125+ }126+127+private function checkUserId(Activity $activity, SearchFilter $filter): ?bool128+ {129+return $filter->getFilterValue() === $activity->user->getUuid() ? null : false;130+ }131+132+private function checkChannelId(Activity $activity, SearchFilter $filter): ?bool133+ {134+return $filter->getFilterValue() === $activity->getType() ? null : false;135+ }136+137+private function checkProviderId(Activity $activity, SearchFilter $filter): ?bool138+ {139+return $filter->getFilterValue() === $activity->getProvider() ? null : false;140+ }141+142+private function checkCategoryId(Activity $activity, SearchFilter $filter): ?bool143+ {144+$categoryId = $activity->getCategory()?->getUuid();145+if ($categoryId === null) {146+return null;147+ }148+149+return $filter->getFilterValue() === $categoryId ? null : false;150+ }151+152+private function checkMinDuration(Activity $activity, SearchFilter $filter): ?bool153+ {154+return $activity->getDuration() >= (float) $filter->getFilterValue() ? null : false;155+ }156+157+private function checkMaxDuration(Activity $activity, SearchFilter $filter): ?bool158+ {159+return $activity->getDuration() <= (float) $filter->getFilterValue() ? null : false;160+ }161+162+private function checkNotLogged(Activity $activity, SearchFilter $filter): ?bool163+ {164+if (! $filter->getFilterValue()) {165+return null;166+ }167+168+$isLogged = $activity->getCrmProviderId() !== null;169+$isInternal = $activity->isInternal();170+171+return (! $isLogged || $isInternal) ? null : false;172+ }173+174+private function checkOnlyRecorded(Activity $activity, SearchFilter $filter): ?bool175+ {176+$filterValue = (int) $filter->getFilterValue();177+$hasRecording = $activity->recording_state !== Activity::RECORDING_OFF;178+179+return match ($filterValue) {180+1 => $hasRecording ? null : false, // Only recorded181+2 => ! $hasRecording ? null : false, // Only non-recorded182+default => null,183+ };184+ }185+186+private function checkStageId(Activity $activity, SearchFilter $filter): ?bool187+ {188+$stageId = $activity->getStage()?->getUuid();189+if ($stageId === null) {190+return null; // No stage, let ES handle191+ }192+193+return $filter->getFilterValue() === $stageId ? null : false;194+ }195+196+private function checkStartDate(Activity $activity, SearchFilter $filter): ?bool197+ {198+$startTime = $activity->getActualStartTime();199+if ($startTime === null) {200+return null;201+ }202+203+$filterDate = Carbon::parse($filter->getFilterValue());204+205+return $startTime->gte($filterDate) ? null : false;206+ }207+208+private function checkEndDate(Activity $activity, SearchFilter $filter): ?bool209+ {210+$endTime = $activity->getActualEndTime();211+if ($endTime === null) {212+return null;213+ }214+215+$filterDate = Carbon::parse($filter->getFilterValue())->endOfDay();216+217+return $endTime->lte($filterDate) ? null : false;218+ }219+220+private function checkLanguages(Activity $activity, SearchFilter $filter): ?bool221+ {222+$activityLanguage = $activity->getLanguageCode();223+if ($activityLanguage === null) {224+return null;225+ }226+227+// Filter values are always base language codes (e.g., 'en', 'fr').228+// Extract base code from activity locale (e.g., en_GB -> en) to match ES query behavior.229+// See LanguageFilterDefinition::getQueries() which uses regex: $language . '_[a-z]{2}'230+$activityLangCode = explode('_', $activityLanguage)[0];231+$filterLanguage = $filter->getFilterValue();232+233+return $activityLangCode === $filterLanguage ? null : false;69 }234 }70}235}</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
Gemini said
Gemini said
This code selection introduces a
pre-filtering mechanism
to the
Jiminny\Component\Nudge\Job
namespace. The primary goal is to optimize performance by validating an activity against search criteria in-memory before dispatching costly background jobs.
Core Functionality Changes
Core Functionality Changes
Selective Loading:
The
handle()
method now eager-loads
user.group
for activities and specifically filters for
FREQ_INSTANTLY
nudges and their associated search filters.
Pre-Dispatch Validation:
Instead of dispatching jobs for every instant nudge, the system now calls
activityMightMatchSearch()
.
Short-Circuiting:
If an activity fails a pre-filter check (e.g., mismatched user ID or duration), the job dispatch is skipped, and the event is logged with the specific mismatch reason.
Performance Metrics:
Adds summary logging at the end of the process to track:
Total searches processed.
Number of skipped dispatches.
The "Skip Rate" percentage.
Implemented Filter Checks
Implemented Filter Checks
The logic includes a
match
expression to validate various activity attributes against
SearchFilter
values:
Identity & Metadata:
Matches for
group_id
,
user_id
,
channel_id
, and
provider_id
.
Temporal & Duration:
* Validates
min_duration
and
max_duration
.
Checks
start_date
and
end_date
using Carbon parsing.
Activity State:
*
Logging:
Determines if an activity is logged to a CRM or is internal via
checkNotLogged
.
Recording:
Uses
checkOnlyRecorded
to filter based on whether a recording exists.
Categorization:
Checks for
category_id
,
stage_id
, and
languages
.
Note:
The language check specifically extracts base codes (e.g.,
en
from
en_GB
) to align with Elasticsearch behavior.
Logic Design
Logic Design
Nullable Returns:
Filter methods return
null
if a match is possible (or cannot be determined), and
false
only when a definitive mismatch is found.
Safe Fallback:
If a filter type is unknown (
default
), the system assumes a match and proceeds to dispatch, ensuring no false negatives.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
You said what is the logic behind diff. Act as code reviewer. First review the changes then explain it and then evaluate. Try to find potential issues and bottlenecks
You said
what is the logic behind diff. Act as code reviewer. First review the changes then explain it and then evaluate. Try to find potential issues and bottlenecks
Expand
Listen
Show more options
Show thinking
Gemini said
Gemini said
Here is a review of the changes provided in the diff, broken down by your requested structure.
1. Review of Changes
1. Review of Changes
This PR refactors the
ProcessNudgeSearchJob
dispatching mechanism within the
handle()
method.
Query Optimization:
Eager loads necessary relationships (
user.group
,
filters
) and scopes the
nudges
relationship at the database level to only fetch
FREQ_INSTANTLY
records.
In-Memory Filtering:
Introduces a pre-filtering mechanism (
activityMightMatchSearch
) that checks the
Activity
against
SearchFilter
criteria before deciding to dispatch a job.
Helper Methods:
Adds 13 private
check*
methods to handle the specific comparison logic for different filter types (e.g., duration, dates, categories, stages).
Observability:
Adds structured logging to record exactly why a nudge was skipped and outputs a summary report (total, skipped, dispatched, skip rate) at the end of the execution.
2. Explanation of Logic
2. Explanation of Logic
The core philosophy of this change is
"veto-based short-circuiting"
.
Previously, the job fetched all searches with instant nudges for a team's users and blindly dispatched a queue job for every single one. The heavy lifting of deciding if the activity actually matched the search was likely deferred to the queue worker and Elasticsearch.
Now, the code evaluates the filters in the current process:
It iterates through each
Search
and its associated
SearchFilter
s.
It routes the filter to a specific
check*
method using a
match
expression based on the filter's property name.
The Veto:
The
check*
methods are designed to return
false
only if there is an absolute mismatch
(e.g., the filter requires a minimum duration of 10, but the activity is 5).
The Pass:
If the filter matches, or if the activity lacks the data needed to make a firm decision (e.g., no stage is assigned, or the filter type is unrecognized), the method returns
null
. This acts as a pass, delegating the final strict evaluation to Elasticsearch later in the pipeline.
If any filter returns
false
, the search is skipped, saving a queue dispatch.
3. Evaluation
3. Evaluation
Overall, this is a
highly effective performance optimization
.
Pros:
It significantly reduces queue bloat. By filtering out obvious mismatches in-memory, you save the overhead of serializing, dispatching, picking up, and processing jobs that are destined to fail or do nothing. The use of
match
makes the routing exceptionally clean, and the nullable return design is a smart way to avoid false negatives.
Cons/Trade-offs:
You are trading background queue worker time for a slight increase in synchronous memory and CPU usage on the current job. However, queue I/O is almost always more expensive than simple in-memory comparisons, making this a worthwhile trade.
4. Potential Issues & Bottlenecks
4. Potential Issues & Bottlenecks
While the logic is sound, there are a few architectural bottlenecks and risks introduced or maintained in this diff:
Potential N+1 Query / Lazy Loading Issues:
In the
handle
method, the activity is loaded with
Activity::with(['user.group'])
. However, inside your new
check*
methods, you are calling:
$activity->getCategory()?->getUuid()
$activity->getStage()?->getUuid()
If
category
and
stage
are Eloquent relationships and are not eager-loaded on the original
$activity
model, calling these methods inside a loop of
$totalSearches
will trigger lazy-loaded database queries.
Fix:
Update line 38 to:
$activity = Activity::with(['user.group', 'category', 'stage'])->...
Massive Memory Consumption (Pre-existing but critical):
Lines 39-41:
PHP
Download code
Copy code
$team
= Team::with([
'users'
])->findOrFail(
$activity
->user->team_id);
$usersIds
=
$team
->users->pluck(
'id'
)->toArray();
If a team has thousands of users,
Team::with(['users'])
hydrates thousands of full Eloquent User models into memory just to extract their IDs.
Fix:
Bypass hydrating the models entirely by querying the relationship directly:
$usersIds = $team->users()->pluck('id')->toArray();
Repeated Carbon Parsing in Loops:
In
checkStartDate
and
checkEndDate
, you parse the filter date:
Carbon::parse($filter->getFilterValue())
. If the same date filter applies to multiple searches, Carbon is being instantiated repeatedly in the loop. While Carbon is relatively fast, doing this hundreds of times adds unnecessary CPU cycles.
Fix:
This is a minor nitpick, but if performance is the absolute goal, you could memoize/cache the parsed filter values within the job.
Loose Type Comparisons:
In methods like
checkChannelId
or
checkLanguages
, you are using strict equality (
===
). Ensure that
$filter->getFilterValue()
(which is typically returned as a string from a database payload) matches the exact type returned by
$activity->getType()
or
$activityLangCode
. If one is an integer
1
and the other is a string
"1"
, the strict check will return
false
, incorrectly preventing the nudge from sending.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said what would be your suggestion?
You said
what would be your suggestion?
Listen
Show more options
Show thinking
Gemini said
Gemini said
Here are actionable suggestions to address the potential issues and bottlenecks identified in the review. These optimizations focus on reducing memory footprint, preventing lazy-loading, and ensuring data type resilience.
1. Fix the N+1 Query Risk (Eager Loading)
1. Fix the N+1 Query Risk (Eager Loading)
Your
checkCategoryId
and
checkStageId
methods call
$activity->getCategory()
and
$activity->getStage()
. If these relationships aren't eager-loaded, Laravel will execute a new database query for every check inside the loop.
Suggestion:
Add
category
and
stage
to the initial eager-load array.
PHP
Download code
Copy code
// Before (Line 38)
$activity
= Activity::with([
'user.group'
])->uuid(
$this
->activityUuid,
false
)->firstOrFail();
// After
$activity
= Activity::with([
'user.group'
,
'category'
,
'stage'
])->uuid(
$this
->activityUuid,
false
)->firstOrFail();
2. Drastically Reduce Memory Usage
2. Drastically Reduce Memory Usage
Currently, you are hydrating full Eloquent
User
models into memory just to extract their IDs. If a team has hundreds or thousands of users, this will spike memory usage and potentially crash the worker.
Suggestion:
Use the relationship query builder to perform the
pluck
directly at the database level, bypassing Eloquent model hydration entirely.
PHP
Download code
Copy code
// Before (Lines 39-41)
$team
= Team::with([
'users'
])->findOrFail(
$activity
->user->team_id);
$usersIds
=
$team
->users->pluck(
'id'
)->toArray();
// After (No need to eager load 'users' on the Team model anymore)
$team
= Team::findOrFail(
$activity
->user->team_id);
$usersIds
=
$team
->users()->pluck(
'users.id'
)->toArray();
// Note the `()` after users
3. Harden Type Comparisons
3. Harden Type Comparisons
Since Elasticsearch and databases often return IDs or filter values as strings, strict comparison (
===
) against an Eloquent model's attribute (which might be cast to an integer) can cause false negatives.
Suggestion:
Cast your values before comparison, or use loose equality (
==
) if you are absolutely certain of the payload structure.
PHP
Download code
Copy code
// Example for checkChannelId (Lines 132-135)
private
function...
|
7897
|
NULL
|
NULL
|
NULL
|
|
24948
|
1049
|
3
|
2026-05-12T10:29:17.219675+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778581757219_m2.jpg...
|
Firefox
|
JY-20773 fix user pilot tracking ofr automated rep JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app — Work...
|
True
|
github.com/jiminny/app/pull/12024
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Unnamed Group
TypeError: League\Flysystem\Filesyst Unnamed Group
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
CloudWatch | us-east-2
CloudWatch | us-east-2
Unnamed Group
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Pull requests · jiminny/app
Pull requests · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app
JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app
Data Explorer
Data Explorer
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
Jiminny
Jiminny
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
Platform Team - Backlog - Jira
Platform Team - Backlog - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
Close tab
Pipelines - jiminny/app
Pipelines - jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (32)
Pull requests
(
32
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (4)
Security and quality
(
4
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
JY-20773 fix user pilot tracking for automated report generated #12024 Edit title
JY-20773 fix user pilot tracking for automated report generated
#
12024
Edit title
Awaiting approval
Awaiting approval
Code
Code
Open
LakyLak
LakyLak
wants to merge 2 commits into
master
master
from
JY-20773-fix-automated-reports-user-pilot-tracking
JY-20773-fix-automated-reports-user-pilot-tracking
Copy head branch name to clipboard
Lines changed: 3 additions & 0 deletions
Conversation (1)
Conversation
(
1
)
Commits (2)
Commits
(
2
)
Checks (3)
Checks
(
3
)
Files changed (1)
Files changed
(
1
)
Open
JY-20773 fix user pilot tracking for automated report generated #12024 LakyLak wants to merge 2 commits into master from JY-20773-fix-automated-reports-user-pilot-tracking Copy head branch name to clipboard
JY-20773 fix user pilot tracking for automated report generated
JY-20773 fix user pilot tracking for automated report generated
#
12024
LakyLak
LakyLak
wants to merge 2 commits into
master
master
from
JY-20773-fix-automated-reports-user-pilot-tracking
JY-20773-fix-automated-reports-user-pilot-tracking
Copy head branch name to clipboard
Conversation
Conversation
@LakyLak
Show options
LakyLak commented 2 weeks ago
LakyLak
LakyLak
commented
2 weeks ago
2 weeks ago
JIRA: JY-20773
JIRA:
JY-20773
JY-20773
Changes:
Changes:
Add SerializesModels trait
Add or remove reactions
LakyLak
LakyLak
and others
added
2
commits
2 weeks ago
2 weeks ago
@LakyLak
JY-20773
JY-20773
fix user pilot tracking ofr automated report generated
fix user pilot tracking ofr automated report generated
8 / 10 checks OK
6bd41c8
6bd41c8
@LakyLak
Merge branch 'master' into
Merge branch 'master' into
JY-20773
JY-20773
-fix-automated-reports-user-pilot-…
-fix-automated-reports-user-pilot-…
…
Verified
Verified
12 / 12 checks OK
5b2c922
5b2c922
@sonarqubecloud
Show options
sonarqubecloud Bot commented 6 minutes ago
sonarqubecloud
sonarqubecloud
Bot
commented
6 minutes ago
6 minutes ago
Quality Gate Passed Quality Gate passed
Quality Gate Passed
Quality Gate passed
Issues
0 New issues
0 New issues
0 Accepted issues
0 Accepted issues
Measures
0 Security Hotspots
0 Security Hotspots
0.0% Coverage on New Code
0.0% Coverage on New Code
0.0% Duplication on New Code
0.0% Duplication on New Code
See analysis details on SonarQube Cloud
See analysis details on SonarQube Cloud
Add or remove reactions
This branch has not been deployed
This branch has not been deployed
No deployments
Merge info
Merge info
Review required
Review required
At least 1 approving review is required by reviewers with write access.
All checks have passed
All checks have passed
12 successful checks
Expand checks
This branch is out-of-date with the base branch
This branch is out-of-date with the base branch
Merge the latest changes from master into this branch. This merge commit will be associated with LakyLak.
Update branch
Update branch
Update branch options
Merging is blocked
Merging is blocked
At least 1 approving review is required by reviewers with write access.
Enable auto-merge
Enable auto-merge
Select merge method
You can also merge this with the command line.
View command line instructions.
Still in progress?
Convert to draft
Convert to draft
@LakyLak
Add a comment
Add a comment
Comment
Write
Write
Preview
Preview
Comment
Markdown is supported
Markdown
is supported
Paste, drop, or click to add files
Paste, drop, or click to add files
Close pull request
Close pull request
Comment
Remember, contributions to this repository should follow our
GitHub Community Guidelines
GitHub Community Guidelines
.
ProTip!
Add
.patch
.patch
or
.diff
.diff
to the end of URLs for Git’s plaintext views.
Reviewers
No reviews—at least 1 approving review is required.
Still in progress?
Convert to draft
Assignees
No one—
assign yourself
Labels
None yet
Projects
None yet
Milestone
No milestone
Development
Development
Successfully merging this pull request may close these issues.
None yet
Notifications Customize
Notifications
Customize
Unsubscribe
Unsubscribe
You’re receiving notifications because you’re watching this repository.
1 participant
1 participant
@LakyLak
Lock conversation
Lock conversation
Footer
Footer
GitHub Homepage
© 2026 GitHub, Inc.
Footer navigation
Footer navigation
Terms
Terms
Privacy
Privacy
Security
Security
Status
Status
Community
Community
Docs
Docs
Contact
Contact
Manage cookies
Do not share my personal information
sonarcloud.io/project/issues?id=jiminny_app&pullRequest=12024&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Unnamed Group","depth":4,"bounds":{"left":0.0028257978,"top":0.057063047,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":4,"bounds":{"left":0.0028257978,"top":0.08060654,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":5,"bounds":{"left":0.015957447,"top":0.09217877,"width":0.40492022,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0028257978,"top":0.11332801,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.015957447,"top":0.12490024,"width":0.04138963,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unnamed Group","depth":4,"bounds":{"left":0.0028257978,"top":0.15123703,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"bounds":{"left":0.0028257978,"top":0.17478053,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":5,"bounds":{"left":0.015957447,"top":0.18635276,"width":0.16888298,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":4,"bounds":{"left":0.0,"top":0.207502,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.21907422,"width":0.16140293,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.24022347,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.25179568,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.27294493,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.28451717,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pull requests · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.3056664,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.31723863,"width":0.04537899,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":4,"bounds":{"left":0.0,"top":0.33838788,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.3499601,"width":0.1200133,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.37110934,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.38268158,"width":0.19331782,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20776] Automated report - sentry - Jira","depth":4,"bounds":{"left":0.0,"top":0.4038308,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20776] Automated report - sentry - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.41540304,"width":0.07646277,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.4365523,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.4481245,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.46927375,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.48084596,"width":0.15159574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Data Explorer","depth":4,"bounds":{"left":0.0,"top":0.5019952,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Data Explorer","depth":5,"bounds":{"left":0.013297873,"top":0.51356745,"width":0.0234375,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20776] Automated report - sentry - Jira","depth":4,"bounds":{"left":0.0,"top":0.53471667,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20776] Automated report - sentry - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.5462889,"width":0.07646277,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.5674381,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.013297873,"top":0.57901037,"width":0.013131649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.60015965,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.6117318,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":4,"bounds":{"left":0.0,"top":0.6328811,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6444533,"width":0.09524601,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Platform Team - Backlog - Jira","depth":4,"bounds":{"left":0.0,"top":0.66560256,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team - Backlog - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6771748,"width":0.053025264,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":4,"bounds":{"left":0.0,"top":0.698324,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.70989627,"width":0.1200133,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.7310455,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.7426177,"width":0.19331782,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.73822826,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.76376694,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.7753392,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.7980846,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to content","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":10,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"You have unread notifications(g then n)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open user navigation menu","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (32)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"32","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Agents","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security and quality (4)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security and quality","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Important update","depth":10,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Important update","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Review this update","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Review this update","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and manage your preferences in your","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GitHub account settings","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub account settings","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dismiss banner","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"JY-20773 fix user pilot tracking for automated report generated #12024 Edit title","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking for automated report generated","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12024","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit title","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Awaiting approval","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Awaiting approval","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Code","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":13,"bounds":{"left":0.34840426,"top":0.0,"width":0.011968086,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":15,"bounds":{"left":0.36702126,"top":0.0,"width":0.018450798,"height":0.016759777},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":16,"bounds":{"left":0.36702126,"top":0.0,"width":0.018450798,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 2 commits into","depth":15,"bounds":{"left":0.38680187,"top":0.0,"width":0.06648936,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":15,"bounds":{"left":0.45462102,"top":0.0,"width":0.018284574,"height":0.017557861},"on_screen":false,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":16,"bounds":{"left":0.4566157,"top":0.0,"width":0.014295213,"height":0.011572227},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":16,"bounds":{"left":0.4742354,"top":0.0,"width":0.009973404,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20773-fix-automated-reports-user-pilot-tracking","depth":16,"bounds":{"left":0.48553857,"top":0.0,"width":0.12400266,"height":0.017557861},"on_screen":false,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773-fix-automated-reports-user-pilot-tracking","depth":17,"bounds":{"left":0.48753324,"top":0.0,"width":0.1200133,"height":0.011572227},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":16,"bounds":{"left":0.610871,"top":0.0,"width":0.00930851,"height":0.022346368},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 3 additions & 0 deletions","depth":14,"bounds":{"left":0.72041225,"top":0.0,"width":0.019946808,"height":0.11412609},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Conversation (1)","depth":16,"bounds":{"left":0.33776596,"top":0.0,"width":0.054022606,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Conversation","depth":17,"bounds":{"left":0.35006648,"top":0.0,"width":0.028091755,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.38746676,"top":0.0,"width":0.0029920214,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":18,"bounds":{"left":0.39045876,"top":0.0,"width":0.0021609042,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.39261967,"top":0.0,"width":0.0016622341,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Commits (2)","depth":16,"bounds":{"left":0.39178857,"top":0.0,"width":0.045545213,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Commits","depth":17,"bounds":{"left":0.4040891,"top":0.0,"width":0.019115692,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.43301198,"top":0.0,"width":0.0029920214,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":18,"bounds":{"left":0.43600398,"top":0.0,"width":0.0028257978,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.43882978,"top":0.0,"width":0.0016622341,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Checks (3)","depth":16,"bounds":{"left":0.43733376,"top":0.0,"width":0.04255319,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks","depth":17,"bounds":{"left":0.4496343,"top":0.0,"width":0.015957447,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.47556517,"top":0.0,"width":0.0028257978,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":18,"bounds":{"left":0.47839096,"top":0.0,"width":0.0029920214,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.48138297,"top":0.0,"width":0.0016622341,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Files changed (1)","depth":16,"bounds":{"left":0.47988698,"top":0.0,"width":0.055684842,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Files changed","depth":17,"bounds":{"left":0.4921875,"top":0.0,"width":0.029753989,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.53125,"top":0.0,"width":0.0029920214,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":18,"bounds":{"left":0.53424203,"top":0.0,"width":0.0019946808,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.5362367,"top":0.0,"width":0.0018284575,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":14,"bounds":{"left":0.34840426,"top":0.0726257,"width":0.011968086,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JY-20773 fix user pilot tracking for automated report generated #12024 LakyLak wants to merge 2 commits into master from JY-20773-fix-automated-reports-user-pilot-tracking Copy head branch name to clipboard","depth":14,"bounds":{"left":0.36702126,"top":0.058260176,"width":0.23969415,"height":0.042298485},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20773 fix user pilot tracking for automated report generated","depth":16,"bounds":{"left":0.36702126,"top":0.05865922,"width":0.14328457,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking for automated report generated","depth":17,"bounds":{"left":0.36702126,"top":0.06304868,"width":0.14328457,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":16,"bounds":{"left":0.51296544,"top":0.06304868,"width":0.0028257978,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12024","depth":16,"bounds":{"left":0.51579124,"top":0.06304868,"width":0.013464096,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":18,"bounds":{"left":0.36702126,"top":0.08339984,"width":0.016123671,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":19,"bounds":{"left":0.36702126,"top":0.08339984,"width":0.016123671,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 2 commits into","depth":18,"bounds":{"left":0.38447472,"top":0.08339984,"width":0.058011968,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":18,"bounds":{"left":0.44381648,"top":0.08180367,"width":0.018284574,"height":0.015163607},"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":19,"bounds":{"left":0.44581118,"top":0.083798885,"width":0.014295213,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":19,"bounds":{"left":0.46343085,"top":0.08339984,"width":0.00880984,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20773-fix-automated-reports-user-pilot-tracking","depth":19,"bounds":{"left":0.47357047,"top":0.08180367,"width":0.123836435,"height":0.015163607},"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773-fix-automated-reports-user-pilot-tracking","depth":20,"bounds":{"left":0.47556517,"top":0.083798885,"width":0.119847074,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":19,"bounds":{"left":0.5987367,"top":0.07821229,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation","depth":12,"bounds":{"left":0.33776596,"top":0.0,"width":0.0003324468,"height":0.0007980846},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation","depth":13,"bounds":{"left":0.33776596,"top":0.0011971269,"width":0.048204787,"height":0.023144454},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"bounds":{"left":0.33776596,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show options","depth":15,"bounds":{"left":0.61136967,"top":0.0,"width":0.007978723,"height":0.02952913},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"LakyLak commented 2 weeks ago","depth":14,"bounds":{"left":0.3620346,"top":0.0,"width":0.24135639,"height":0.02952913},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":16,"bounds":{"left":0.3620346,"top":0.0071827616,"width":0.018450798,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":17,"bounds":{"left":0.3620346,"top":0.0071827616,"width":0.018450798,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"commented","depth":15,"bounds":{"left":0.38181517,"top":0.0071827616,"width":0.025598405,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"2 weeks ago","depth":15,"bounds":{"left":0.40874335,"top":0.005586592,"width":0.026928192,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2 weeks ago","depth":17,"bounds":{"left":0.40874335,"top":0.0071827616,"width":0.026928192,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JIRA: JY-20773","depth":16,"bounds":{"left":0.3620346,"top":0.042298485,"width":0.25731382,"height":0.017557861},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JIRA:","depth":17,"bounds":{"left":0.3620346,"top":0.042697527,"width":0.015791224,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20773","depth":17,"bounds":{"left":0.3778258,"top":0.042697527,"width":0.026761968,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773","depth":18,"bounds":{"left":0.3778258,"top":0.042697527,"width":0.026761968,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Changes:","depth":16,"bounds":{"left":0.3620346,"top":0.079010375,"width":0.25731382,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changes:","depth":17,"bounds":{"left":0.3620346,"top":0.079010375,"width":0.021110373,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Add SerializesModels trait","depth":18,"bounds":{"left":0.3700133,"top":0.10734238,"width":0.055851065,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add or remove reactions","depth":16,"bounds":{"left":0.3620346,"top":0.13527533,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"LakyLak","depth":14,"bounds":{"left":0.3700133,"top":0.20071827,"width":0.018450798,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":15,"bounds":{"left":0.3700133,"top":0.20071827,"width":0.018450798,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and others","depth":14,"bounds":{"left":0.38979387,"top":0.20071827,"width":0.023105053,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"added","depth":14,"bounds":{"left":0.41289893,"top":0.20071827,"width":0.016123671,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":14,"bounds":{"left":0.4290226,"top":0.20071827,"width":0.0026595744,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"commits","depth":14,"bounds":{"left":0.43168217,"top":0.20071827,"width":0.021110373,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"2 weeks ago","depth":14,"bounds":{"left":0.45279256,"top":0.20071827,"width":0.026761968,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2 weeks ago","depth":16,"bounds":{"left":0.45279256,"top":0.20071827,"width":0.026761968,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"bounds":{"left":0.3700133,"top":0.2406225,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"JY-20773","depth":14,"bounds":{"left":0.37865692,"top":0.2442139,"width":0.019115692,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773","depth":15,"bounds":{"left":0.37865692,"top":0.2442139,"width":0.019115692,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"fix user pilot tracking ofr automated report generated","depth":14,"bounds":{"left":0.40009972,"top":0.2442139,"width":0.12965426,"height":0.011572227},"on_screen":true,"help_text":"JY-20773 fix user pilot tracking ofr automated report generated","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"fix user pilot tracking ofr automated report generated","depth":15,"bounds":{"left":0.40009972,"top":0.2442139,"width":0.12965426,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"8 / 10 checks OK","depth":14,"bounds":{"left":0.60139626,"top":0.2406225,"width":0.005319149,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"6bd41c8","depth":14,"bounds":{"left":0.6080452,"top":0.2442139,"width":0.016954787,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6bd41c8","depth":15,"bounds":{"left":0.6080452,"top":0.2442139,"width":0.016954787,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"bounds":{"left":0.3700133,"top":0.2821229,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Merge branch 'master' into","depth":14,"bounds":{"left":0.37865692,"top":0.2857143,"width":0.062333778,"height":0.011572227},"on_screen":true,"help_text":"Merge branch 'master' into JY-20773-fix-automated-reports-user-pilot-tracking","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Merge branch 'master' into","depth":15,"bounds":{"left":0.37865692,"top":0.2857143,"width":0.062333778,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20773","depth":14,"bounds":{"left":0.44331783,"top":0.2857143,"width":0.019281914,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773","depth":15,"bounds":{"left":0.44331783,"top":0.2857143,"width":0.019281914,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"-fix-automated-reports-user-pilot-…","depth":14,"bounds":{"left":0.46259972,"top":0.2857143,"width":0.083942816,"height":0.011572227},"on_screen":true,"help_text":"Merge branch 'master' into JY-20773-fix-automated-reports-user-pilot-tracking","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"-fix-automated-reports-user-pilot-…","depth":15,"bounds":{"left":0.46259972,"top":0.2857143,"width":0.083942816,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"…","depth":14,"bounds":{"left":0.5505319,"top":0.28651237,"width":0.006981383,"height":0.009577015},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Verified","depth":13,"bounds":{"left":0.57862365,"top":0.28411812,"width":0.020113032,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Verified","depth":15,"bounds":{"left":0.5812833,"top":0.28611332,"width":0.014793883,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"12 / 12 checks OK","depth":14,"bounds":{"left":0.60139626,"top":0.2821229,"width":0.005319149,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"5b2c922","depth":14,"bounds":{"left":0.6080452,"top":0.2857143,"width":0.016954787,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5b2c922","depth":15,"bounds":{"left":0.6080452,"top":0.2857143,"width":0.016954787,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@sonarqubecloud","depth":13,"bounds":{"left":0.33776596,"top":0.3292099,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show options","depth":14,"bounds":{"left":0.61136967,"top":0.33000797,"width":0.007978723,"height":0.02952913},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"sonarqubecloud Bot commented 6 minutes ago","depth":13,"bounds":{"left":0.3620346,"top":0.33000797,"width":0.24135639,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"sonarqubecloud","depth":15,"bounds":{"left":0.3620346,"top":0.33798882,"width":0.036236703,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"sonarqubecloud","depth":16,"bounds":{"left":0.3620346,"top":0.33798882,"width":0.036236703,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Bot","depth":16,"bounds":{"left":0.40176198,"top":0.339585,"width":0.0066489363,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"commented","depth":14,"bounds":{"left":0.41206783,"top":0.33838788,"width":0.025598405,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"6 minutes ago","depth":14,"bounds":{"left":0.43899602,"top":0.3367917,"width":0.030585106,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6 minutes ago","depth":16,"bounds":{"left":0.43899602,"top":0.33838788,"width":0.030585106,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Quality Gate Passed Quality Gate passed","depth":16,"bounds":{"left":0.3620346,"top":0.3735036,"width":0.25731382,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Quality Gate Passed","depth":17,"bounds":{"left":0.3620346,"top":0.37390262,"width":0.0066489363,"height":0.019952115},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Quality Gate passed","depth":18,"bounds":{"left":0.37034574,"top":0.37390262,"width":0.06416223,"height":0.019952115},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Issues","depth":17,"bounds":{"left":0.3620346,"top":0.41460496,"width":0.013464096,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 New issues","depth":17,"bounds":{"left":0.36851728,"top":0.43136472,"width":0.028590426,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0 New issues","depth":18,"bounds":{"left":0.36851728,"top":0.43136472,"width":0.028590426,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Accepted issues","depth":17,"bounds":{"left":0.36851728,"top":0.4481245,"width":0.03956117,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0 Accepted issues","depth":18,"bounds":{"left":0.36851728,"top":0.4481245,"width":0.03956117,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Measures","depth":17,"bounds":{"left":0.3620346,"top":0.47765362,"width":0.020777926,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Security Hotspots","depth":17,"bounds":{"left":0.36851728,"top":0.4944134,"width":0.04288564,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0 Security Hotspots","depth":18,"bounds":{"left":0.36851728,"top":0.4944134,"width":0.04288564,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0.0% Coverage on New Code","depth":17,"bounds":{"left":0.36851728,"top":0.5111732,"width":0.0631649,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0.0% Coverage on New Code","depth":18,"bounds":{"left":0.36851728,"top":0.5111732,"width":0.0631649,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0.0% Duplication on New Code","depth":17,"bounds":{"left":0.36851728,"top":0.52793294,"width":0.066821806,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0.0% Duplication on New Code","depth":18,"bounds":{"left":0.36851728,"top":0.52793294,"width":0.066821806,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"See analysis details on SonarQube Cloud","depth":17,"bounds":{"left":0.3620346,"top":0.5574621,"width":0.087932184,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"See analysis details on SonarQube Cloud","depth":18,"bounds":{"left":0.3620346,"top":0.5574621,"width":0.087932184,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add or remove reactions","depth":15,"bounds":{"left":0.3620346,"top":0.58539504,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"This branch has not been deployed","depth":14,"bounds":{"left":0.375,"top":0.660415,"width":0.2443484,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This branch has not been deployed","depth":15,"bounds":{"left":0.375,"top":0.66201115,"width":0.08843085,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No deployments","depth":14,"bounds":{"left":0.375,"top":0.67996806,"width":0.03274601,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Merge info","depth":12,"bounds":{"left":0.35638297,"top":0.72027135,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge info","depth":13,"bounds":{"left":0.35638297,"top":0.72306466,"width":0.023105053,"height":0.0518755},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Review required","depth":13,"bounds":{"left":0.37533244,"top":0.7338388,"width":0.24401596,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Review required","depth":14,"bounds":{"left":0.37533244,"top":0.735834,"width":0.04055851,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"At least 1 approving review is required by reviewers with write access.","depth":14,"bounds":{"left":0.37533244,"top":0.75458896,"width":0.14960106,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"All checks have passed","depth":13,"bounds":{"left":0.37533244,"top":0.7960894,"width":0.23337767,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"All checks have passed","depth":14,"bounds":{"left":0.37533244,"top":0.7980846,"width":0.05851064,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12 successful checks","depth":14,"bounds":{"left":0.37533244,"top":0.8168396,"width":0.045545213,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand checks","depth":13,"bounds":{"left":0.3567154,"top":0.78332,"width":0.2679521,"height":0.061452515},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"This branch is out-of-date with the base branch","depth":14,"bounds":{"left":0.37533244,"top":0.85833997,"width":0.18999335,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This branch is out-of-date with the base branch","depth":15,"bounds":{"left":0.37533244,"top":0.8603352,"width":0.12051197,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge the latest changes from master into this branch. This merge commit will be associated with LakyLak.","depth":15,"bounds":{"left":0.37533244,"top":0.8790902,"width":0.17569813,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Update branch","depth":14,"bounds":{"left":0.56798536,"top":0.85833997,"width":0.04138963,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Update branch","depth":16,"bounds":{"left":0.57230717,"top":0.86432564,"width":0.03274601,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Update branch options","depth":15,"bounds":{"left":0.6090425,"top":0.85833997,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Merging is blocked","depth":13,"bounds":{"left":0.37533244,"top":0.93735033,"width":0.24401596,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merging is blocked","depth":14,"bounds":{"left":0.37533244,"top":0.9393456,"width":0.047706116,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"At least 1 approving review is required by reviewers with write access.","depth":16,"bounds":{"left":0.37533244,"top":0.95810056,"width":0.14960106,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Enable auto-merge","depth":12,"bounds":{"left":0.3620346,"top":0.99960095,"width":0.050531916,"height":0.0003990531},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enable auto-merge","depth":14,"bounds":{"left":0.36635637,"top":1.0,"width":0.041888297,"height":-0.005586624},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Select merge method","depth":13,"bounds":{"left":0.41223404,"top":0.99960095,"width":0.010638298,"height":0.0003990531},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"You can also merge this with the command line.","depth":13,"bounds":{"left":0.42519948,"top":1.0,"width":0.089428194,"height":-0.0063847303},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"View command line instructions.","depth":13,"bounds":{"left":0.51579124,"top":1.0,"width":0.060837764,"height":-0.0051875114},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Still in progress?","depth":13,"bounds":{"left":0.5611702,"top":1.0,"width":0.03125,"height":-0.046288848},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Convert to draft","depth":12,"bounds":{"left":0.59375,"top":1.0,"width":0.029920213,"height":-0.04509175},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Convert to draft","depth":14,"bounds":{"left":0.59375,"top":1.0,"width":0.029920213,"height":-0.046288848},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":15,"bounds":{"left":0.33776596,"top":1.0,"width":0.013297873,"height":-0.078611374},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Add a comment","depth":17,"bounds":{"left":0.35638297,"top":1.0,"width":0.03956117,"height":-0.078611374},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Add a comment","depth":18,"bounds":{"left":0.35638297,"top":1.0,"width":0.03956117,"height":-0.08060658},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Comment","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Write","depth":18,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Write","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Preview","depth":18,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Preview","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextArea","text":"Comment","depth":20,"on_screen":false,"placeholder":" ","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Markdown is supported","depth":19,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Markdown","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is supported","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Paste, drop, or click to add files","depth":18,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Paste, drop, or click to add files","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close pull request","depth":17,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Close pull request","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Comment","depth":17,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Remember, contributions to this repository should follow our","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GitHub Community Guidelines","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub Community Guidelines","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ProTip!","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Add","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".patch","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".patch","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".diff","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".diff","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to the end of URLs for Git’s plaintext views.","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Reviewers","depth":16,"bounds":{"left":0.6356383,"top":0.0,"width":0.10638298,"height":0.0207502},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"No reviews—at least 1 approving review is required.","depth":15,"bounds":{"left":0.6356383,"top":0.023543496,"width":0.09624335,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Still in progress?","depth":16,"bounds":{"left":0.6356383,"top":0.044293694,"width":0.031083776,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Convert to draft","depth":16,"bounds":{"left":0.66805184,"top":0.04309657,"width":0.029920213,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Assignees","depth":16,"bounds":{"left":0.6356383,"top":0.08699122,"width":0.10638298,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"No one—","depth":15,"bounds":{"left":0.6356383,"top":0.11213089,"width":0.016788565,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"assign yourself","depth":15,"bounds":{"left":0.65242684,"top":0.11093376,"width":0.02825798,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Labels","depth":15,"bounds":{"left":0.6356383,"top":0.14844373,"width":0.10638298,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"None yet","depth":14,"bounds":{"left":0.6356383,"top":0.1735834,"width":0.016788565,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Projects","depth":16,"bounds":{"left":0.6356383,"top":0.20989625,"width":0.10638298,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"None yet","depth":15,"bounds":{"left":0.6356383,"top":0.23503591,"width":0.016788565,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Milestone","depth":16,"bounds":{"left":0.6356383,"top":0.27134877,"width":0.10638298,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"No milestone","depth":15,"bounds":{"left":0.6356383,"top":0.29648843,"width":0.024601065,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Development","depth":17,"bounds":{"left":0.6356383,"top":0.33599362,"width":0.10638298,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Development","depth":18,"bounds":{"left":0.6356383,"top":0.33719075,"width":0.025764627,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Successfully merging this pull request may close these issues.","depth":18,"bounds":{"left":0.6356383,"top":0.35794094,"width":0.10305851,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"None yet","depth":18,"bounds":{"left":0.6356383,"top":0.39465284,"width":0.016788565,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Notifications Customize","depth":15,"bounds":{"left":0.6356383,"top":0.4309657,"width":0.10638298,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Notifications","depth":17,"bounds":{"left":0.6356383,"top":0.43535516,"width":0.025099734,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Customize","depth":17,"bounds":{"left":0.72207445,"top":0.43535516,"width":0.019946808,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unsubscribe","depth":16,"bounds":{"left":0.6356383,"top":0.45490822,"width":0.10638298,"height":0.022346368},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unsubscribe","depth":18,"bounds":{"left":0.68002,"top":0.46009576,"width":0.024102394,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You’re receiving notifications because you’re watching this repository.","depth":16,"bounds":{"left":0.6356383,"top":0.48164406,"width":0.1022274,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1 participant","depth":15,"bounds":{"left":0.6356383,"top":0.5355148,"width":0.10638298,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1 participant","depth":16,"bounds":{"left":0.6356383,"top":0.5367119,"width":0.02443484,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":15,"bounds":{"left":0.6356383,"top":0.5594573,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Lock conversation","depth":15,"bounds":{"left":0.6356383,"top":0.6065443,"width":0.04338431,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Lock conversation","depth":17,"bounds":{"left":0.64328456,"top":0.6077414,"width":0.035738032,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Footer","depth":7,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Footer","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GitHub Homepage","depth":7,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"© 2026 GitHub, Inc.","depth":8,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Footer navigation","depth":8,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Footer navigation","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Terms","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Terms","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Privacy","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Privacy","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Status","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Status","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Community","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Community","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Docs","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Docs","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Contact","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Contact","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage cookies","depth":11,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Do not share my personal information","depth":11,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"sonarcloud.io/project/issues?id=jiminny_app&pullRequest=12024&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true","depth":5,"bounds":{"left":0.0809508,"top":0.9876297,"width":0.21609043,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8676156035106859440
|
-284771924771374976
|
visual_change
|
accessibility
|
NULL
|
Unnamed Group
TypeError: League\Flysystem\Filesyst Unnamed Group
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
CloudWatch | us-east-2
CloudWatch | us-east-2
Unnamed Group
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Pull requests · jiminny/app
Pull requests · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app
JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app
Data Explorer
Data Explorer
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
Jiminny
Jiminny
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
Platform Team - Backlog - Jira
Platform Team - Backlog - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
Close tab
Pipelines - jiminny/app
Pipelines - jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (32)
Pull requests
(
32
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (4)
Security and quality
(
4
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
JY-20773 fix user pilot tracking for automated report generated #12024 Edit title
JY-20773 fix user pilot tracking for automated report generated
#
12024
Edit title
Awaiting approval
Awaiting approval
Code
Code
Open
LakyLak
LakyLak
wants to merge 2 commits into
master
master
from
JY-20773-fix-automated-reports-user-pilot-tracking
JY-20773-fix-automated-reports-user-pilot-tracking
Copy head branch name to clipboard
Lines changed: 3 additions & 0 deletions
Conversation (1)
Conversation
(
1
)
Commits (2)
Commits
(
2
)
Checks (3)
Checks
(
3
)
Files changed (1)
Files changed
(
1
)
Open
JY-20773 fix user pilot tracking for automated report generated #12024 LakyLak wants to merge 2 commits into master from JY-20773-fix-automated-reports-user-pilot-tracking Copy head branch name to clipboard
JY-20773 fix user pilot tracking for automated report generated
JY-20773 fix user pilot tracking for automated report generated
#
12024
LakyLak
LakyLak
wants to merge 2 commits into
master
master
from
JY-20773-fix-automated-reports-user-pilot-tracking
JY-20773-fix-automated-reports-user-pilot-tracking
Copy head branch name to clipboard
Conversation
Conversation
@LakyLak
Show options
LakyLak commented 2 weeks ago
LakyLak
LakyLak
commented
2 weeks ago
2 weeks ago
JIRA: JY-20773
JIRA:
JY-20773
JY-20773
Changes:
Changes:
Add SerializesModels trait
Add or remove reactions
LakyLak
LakyLak
and others
added
2
commits
2 weeks ago
2 weeks ago
@LakyLak
JY-20773
JY-20773
fix user pilot tracking ofr automated report generated
fix user pilot tracking ofr automated report generated
8 / 10 checks OK
6bd41c8
6bd41c8
@LakyLak
Merge branch 'master' into
Merge branch 'master' into
JY-20773
JY-20773
-fix-automated-reports-user-pilot-…
-fix-automated-reports-user-pilot-…
…
Verified
Verified
12 / 12 checks OK
5b2c922
5b2c922
@sonarqubecloud
Show options
sonarqubecloud Bot commented 6 minutes ago
sonarqubecloud
sonarqubecloud
Bot
commented
6 minutes ago
6 minutes ago
Quality Gate Passed Quality Gate passed
Quality Gate Passed
Quality Gate passed
Issues
0 New issues
0 New issues
0 Accepted issues
0 Accepted issues
Measures
0 Security Hotspots
0 Security Hotspots
0.0% Coverage on New Code
0.0% Coverage on New Code
0.0% Duplication on New Code
0.0% Duplication on New Code
See analysis details on SonarQube Cloud
See analysis details on SonarQube Cloud
Add or remove reactions
This branch has not been deployed
This branch has not been deployed
No deployments
Merge info
Merge info
Review required
Review required
At least 1 approving review is required by reviewers with write access.
All checks have passed
All checks have passed
12 successful checks
Expand checks
This branch is out-of-date with the base branch
This branch is out-of-date with the base branch
Merge the latest changes from master into this branch. This merge commit will be associated with LakyLak.
Update branch
Update branch
Update branch options
Merging is blocked
Merging is blocked
At least 1 approving review is required by reviewers with write access.
Enable auto-merge
Enable auto-merge
Select merge method
You can also merge this with the command line.
View command line instructions.
Still in progress?
Convert to draft
Convert to draft
@LakyLak
Add a comment
Add a comment
Comment
Write
Write
Preview
Preview
Comment
Markdown is supported
Markdown
is supported
Paste, drop, or click to add files
Paste, drop, or click to add files
Close pull request
Close pull request
Comment
Remember, contributions to this repository should follow our
GitHub Community Guidelines
GitHub Community Guidelines
.
ProTip!
Add
.patch
.patch
or
.diff
.diff
to the end of URLs for Git’s plaintext views.
Reviewers
No reviews—at least 1 approving review is required.
Still in progress?
Convert to draft
Assignees
No one—
assign yourself
Labels
None yet
Projects
None yet
Milestone
No milestone
Development
Development
Successfully merging this pull request may close these issues.
None yet
Notifications Customize
Notifications
Customize
Unsubscribe
Unsubscribe
You’re receiving notifications because you’re watching this repository.
1 participant
1 participant
@LakyLak
Lock conversation
Lock conversation
Footer
Footer
GitHub Homepage
© 2026 GitHub, Inc.
Footer navigation
Footer navigation
Terms
Terms
Privacy
Privacy
Security
Security
Status
Status
Community
Community
Docs
Docs
Contact
Contact
Manage cookies
Do not share my personal information
sonarcloud.io/project/issues?id=jiminny_app&pullRequest=12024&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
17515
|
772
|
53
|
2026-05-11T10:24:41.535139+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778495081535_m1.jpg...
|
Firefox
|
Screenpipe — Archive — Personal
|
True
|
app.screenpipe.lakylak.xyz
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
Monitor
Jump to
--
:
--
Go
APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN
−
1×
+
Follow
Follow
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
14:30
15:00
15:30
16:00
16:30...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.043402776,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.06631944,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.08958333,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.112847224,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.13611111,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Screenpipe [archive.db · 12323.6MB]","depth":7,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screenpipe","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[archive.db · 12323.6MB]","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Activity","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Audio","depth":7,"on_screen":true,"help_text":"No audio data in this database","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Work Report","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Timetable","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Summary","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Date","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"07","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Monitor","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jump to","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Go","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"−","depth":9,"on_screen":true,"help_text":"Zoom out","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1×","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"+","depth":9,"on_screen":true,"help_text":"Zoom in","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Follow","depth":10,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Follow","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8675595511204940736
|
-1778872323972410471
|
click
|
accessibility
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
Monitor
Jump to
--
:
--
Go
APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN
−
1×
+
Follow
Follow
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
14:30
15:00
15:30
16:00
16:30...
|
17514
|
NULL
|
NULL
|
NULL
|
|
17595
|
775
|
1
|
2026-05-11T10:25:52.200137+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778495152200_m2.jpg...
|
Firefox
|
Screenpipe — Archive — Personal
|
True
|
app.screenpipe.lakylak.xyz
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
Monitor
Jump to
--
:
--
Go
APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN
−
1×
+
Follow
Follow
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
14:30
15:00
15:30
16:00
16:30...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.28823137,"top":0.0518755,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.30152926,"top":0.06304868,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.28823137,"top":0.08459697,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.30152926,"top":0.09577015,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.38962767,"top":0.09177973,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.29105717,"top":0.118914604,"width":0.108211435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.29105717,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.3020279,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.3131649,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.32430187,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.33543882,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Screenpipe [archive.db · 12323.6MB]","depth":7,"bounds":{"left":0.4085771,"top":0.061452515,"width":0.06698803,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screenpipe","depth":8,"bounds":{"left":0.4085771,"top":0.06304868,"width":0.027759308,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[archive.db · 12323.6MB]","depth":9,"bounds":{"left":0.43766624,"top":0.06703911,"width":0.037898935,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Activity","depth":7,"bounds":{"left":0.48021942,"top":0.059856344,"width":0.024767287,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":7,"bounds":{"left":0.5056516,"top":0.059856344,"width":0.023769947,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Audio","depth":7,"bounds":{"left":0.53008646,"top":0.059856344,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"No audio data in this database","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Work Report","depth":7,"bounds":{"left":0.55169547,"top":0.059856344,"width":0.03507314,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Timetable","depth":7,"bounds":{"left":0.5874335,"top":0.059856344,"width":0.029753989,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Summary","depth":7,"bounds":{"left":0.6178524,"top":0.059856344,"width":0.034075797,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Date","depth":8,"bounds":{"left":0.93849736,"top":0.0650439,"width":0.008144947,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"07","depth":9,"bounds":{"left":0.9552859,"top":0.06464485,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"bounds":{"left":0.96110374,"top":0.06464485,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":9,"bounds":{"left":0.9644282,"top":0.06464485,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"bounds":{"left":0.970246,"top":0.06464485,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":9,"bounds":{"left":0.9737367,"top":0.06464485,"width":0.009474734,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":8,"bounds":{"left":0.98454124,"top":0.0650439,"width":0.0051529254,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Monitor","depth":9,"bounds":{"left":0.4915226,"top":0.10853951,"width":0.013464096,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jump to","depth":9,"bounds":{"left":0.8500665,"top":0.10853951,"width":0.01412899,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"bounds":{"left":0.87017953,"top":0.10814046,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":9,"bounds":{"left":0.87599736,"top":0.10814046,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"bounds":{"left":0.8793218,"top":0.10814046,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Go","depth":8,"bounds":{"left":0.898105,"top":0.10454908,"width":0.012300532,"height":0.018754989},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN","depth":10,"bounds":{"left":0.4965093,"top":0.14964086,"width":0.10571808,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"−","depth":9,"bounds":{"left":0.8528923,"top":0.1452514,"width":0.009807181,"height":0.018754989},"on_screen":true,"help_text":"Zoom out","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1×","depth":10,"bounds":{"left":0.866855,"top":0.14924182,"width":0.004155585,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"+","depth":9,"bounds":{"left":0.8753325,"top":0.1452514,"width":0.009640957,"height":0.018754989},"on_screen":true,"help_text":"Zoom in","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Follow","depth":10,"bounds":{"left":0.88829786,"top":0.14924182,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Follow","depth":10,"bounds":{"left":0.8942819,"top":0.14924182,"width":0.011136968,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:00","depth":13,"bounds":{"left":0.50182843,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:30","depth":13,"bounds":{"left":0.51894945,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:00","depth":13,"bounds":{"left":0.53640294,"top":0.21947326,"width":0.0076462766,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:30","depth":13,"bounds":{"left":0.55352396,"top":0.21947326,"width":0.0076462766,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:00","depth":13,"bounds":{"left":0.57047874,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:30","depth":13,"bounds":{"left":0.58759975,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13:00","depth":13,"bounds":{"left":0.60488695,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13:30","depth":13,"bounds":{"left":0.62200797,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:00","depth":13,"bounds":{"left":0.639129,"top":0.21947326,"width":0.00831117,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:30","depth":13,"bounds":{"left":0.65625,"top":0.21947326,"width":0.00831117,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15:00","depth":13,"bounds":{"left":0.67353725,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15:30","depth":13,"bounds":{"left":0.6906583,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16:00","depth":13,"bounds":{"left":0.7077792,"top":0.21947326,"width":0.00831117,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16:30","depth":13,"bounds":{"left":0.7250665,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8675595511204940736
|
-1778872323972410471
|
click
|
accessibility
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
Monitor
Jump to
--
:
--
Go
APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN
−
1×
+
Follow
Follow
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
14:30
15:00
15:30
16:00
16:30...
|
17593
|
NULL
|
NULL
|
NULL
|
|
17691
|
777
|
31
|
2026-05-11T10:29:13.946376+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778495353946_m2.jpg...
|
Firefox
|
Screenpipe — Archive — Personal
|
True
|
app.screenpipe.lakylak.xyz
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
Monitor
Jump to
--
:
--
Go
APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN
−
1×
+
Follow
Follow
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
14:30
15:00
15:30
16:00
16:30...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.2942154,"top":0.0518755,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.3075133,"top":0.06304868,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.2942154,"top":0.08459697,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.3075133,"top":0.09577015,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3956117,"top":0.09177973,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.29704124,"top":0.118914604,"width":0.108211435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.29704124,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.30801198,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.31914893,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.3302859,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.3414229,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Screenpipe [archive.db · 12323.6MB]","depth":7,"bounds":{"left":0.41456118,"top":0.061452515,"width":0.06698803,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screenpipe","depth":8,"bounds":{"left":0.41456118,"top":0.06304868,"width":0.027759308,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[archive.db · 12323.6MB]","depth":9,"bounds":{"left":0.44365028,"top":0.06703911,"width":0.037898935,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Activity","depth":7,"bounds":{"left":0.48620346,"top":0.059856344,"width":0.024767287,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":7,"bounds":{"left":0.51163566,"top":0.059856344,"width":0.023769947,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Audio","depth":7,"bounds":{"left":0.53607047,"top":0.059856344,"width":0.020944148,"height":0.0207502},"on_screen":true,"help_text":"No audio data in this database","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Work Report","depth":7,"bounds":{"left":0.55767953,"top":0.059856344,"width":0.03507314,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Timetable","depth":7,"bounds":{"left":0.5934175,"top":0.059856344,"width":0.029753989,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Summary","depth":7,"bounds":{"left":0.62383646,"top":0.059856344,"width":0.034075797,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Date","depth":8,"bounds":{"left":0.93849736,"top":0.0650439,"width":0.008144947,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"07","depth":9,"bounds":{"left":0.9552859,"top":0.06464485,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"bounds":{"left":0.96110374,"top":0.06464485,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":9,"bounds":{"left":0.9644282,"top":0.06464485,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"bounds":{"left":0.970246,"top":0.06464485,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":9,"bounds":{"left":0.9737367,"top":0.06464485,"width":0.009474734,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":8,"bounds":{"left":0.98454124,"top":0.0650439,"width":0.0051529254,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Monitor","depth":9,"bounds":{"left":0.4945146,"top":0.10853951,"width":0.013464096,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jump to","depth":9,"bounds":{"left":0.8530585,"top":0.10853951,"width":0.01412899,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"bounds":{"left":0.87317157,"top":0.10814046,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":9,"bounds":{"left":0.87898934,"top":0.10814046,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"bounds":{"left":0.88231385,"top":0.10814046,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Go","depth":8,"bounds":{"left":0.90109706,"top":0.10454908,"width":0.012300532,"height":0.018754989},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN","depth":10,"bounds":{"left":0.49950132,"top":0.14964086,"width":0.10571808,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"−","depth":9,"bounds":{"left":0.8558843,"top":0.1452514,"width":0.009807181,"height":0.018754989},"on_screen":true,"help_text":"Zoom out","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1×","depth":10,"bounds":{"left":0.86984706,"top":0.14924182,"width":0.004155585,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"+","depth":9,"bounds":{"left":0.87832445,"top":0.1452514,"width":0.009640957,"height":0.018754989},"on_screen":true,"help_text":"Zoom in","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Follow","depth":10,"bounds":{"left":0.8912899,"top":0.14924182,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Follow","depth":10,"bounds":{"left":0.89727396,"top":0.14924182,"width":0.011136968,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:00","depth":13,"bounds":{"left":0.50482047,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:30","depth":13,"bounds":{"left":0.5219415,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:00","depth":13,"bounds":{"left":0.539395,"top":0.21947326,"width":0.0076462766,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:30","depth":13,"bounds":{"left":0.55651593,"top":0.21947326,"width":0.0076462766,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:00","depth":13,"bounds":{"left":0.5734708,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:30","depth":13,"bounds":{"left":0.5905917,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13:00","depth":13,"bounds":{"left":0.607879,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13:30","depth":13,"bounds":{"left":0.625,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:00","depth":13,"bounds":{"left":0.642121,"top":0.21947326,"width":0.00831117,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:30","depth":13,"bounds":{"left":0.65924203,"top":0.21947326,"width":0.00831117,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15:00","depth":13,"bounds":{"left":0.6765292,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15:30","depth":13,"bounds":{"left":0.69365025,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16:00","depth":13,"bounds":{"left":0.71077126,"top":0.21947326,"width":0.00831117,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16:30","depth":13,"bounds":{"left":0.7280585,"top":0.21947326,"width":0.008144947,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8675595511204940736
|
-1778872323972410471
|
click
|
accessibility
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
Monitor
Jump to
--
:
--
Go
APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN
−
1×
+
Follow
Follow
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
14:30
15:00
15:30
16:00
16:30...
|
17689
|
NULL
|
NULL
|
NULL
|
|
25396
|
1066
|
23
|
2026-05-12T11:17:31.444397+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778584651444_m1.jpg...
|
Firefox
|
JY-20773 fix user pilot tracking for automated rep JY-20773 fix user pilot tracking for automated report generated by LakyLak · Pull Request #12024 · jiminny/app — Work...
|
True
|
github.com/jiminny/app/pull/12024
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Unnamed Group
TypeError: League\Flysystem\Filesyst Unnamed Group
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
CloudWatch | us-east-2
CloudWatch | us-east-2
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking for automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking for automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Unnamed Group","depth":4,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20773 fix user pilot tracking for automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking for automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20776] Automated report - sentry - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
8674590707926024820
|
-2720927736323278708
|
click
|
accessibility
|
NULL
|
Unnamed Group
TypeError: League\Flysystem\Filesyst Unnamed Group
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
CloudWatch | us-east-2
CloudWatch | us-east-2
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking for automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking for automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira...
|
25393
|
NULL
|
NULL
|
NULL
|
|
17946
|
781
|
51
|
2026-05-11T10:42:36.608177+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778496156608_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
3
68
3
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Illuminate\Support\Facades\Redis;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'policy' => $this->parsePolicy($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public function parseRetryAfter(Throwable $e): int
{
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$e ' . PHP_EOL . print_r($e, true));
return 5;
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
$policy = $this->parsePolicy($e);
if ($policy === 'TEN_SECONDLY_ROLLING') {
return 10;
}
if ($policy === 'SECONDLY') {
return 1;
}
if ($policy === 'DAILY_LIMIT') {
return 600;
}
$this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [
'exception_class' => get_class($e),
]);
return 10;
}
public function parsePolicy(Throwable $e): ?string
{
if (! method_exists($e, 'getResponseBody')) {
return null;
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return null;
}
$policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;
return is_string($policy) ? strtoupper($policy) : null;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$response ' . PHP_EOL . print_r($response, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$response ' . PHP_EOL . print_r($response->getResponseHeaders(), true));
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (RateLimitException $e) {
// throw $e;
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.82413566,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.8394282,"top":0.019952115,"width":0.076130316,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.5515292,"top":0.15003991,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"bounds":{"left":0.56150264,"top":0.15003991,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.5738032,"top":0.15003991,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.5834442,"top":0.14844373,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.59075797,"top":0.14844373,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Illuminate\\Support\\Facades\\Redis;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (429) from HubSpot by translating it\n * into a RateLimitException carrying retry_after.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'policy' => $this->parsePolicy($e),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public function parseRetryAfter(Throwable $e): int\n {\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$e ' . PHP_EOL . print_r($e, true));\n return 5;\n\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n $policy = $this->parsePolicy($e);\n if ($policy === 'TEN_SECONDLY_ROLLING') {\n return 10;\n }\n if ($policy === 'SECONDLY') {\n return 1;\n }\n if ($policy === 'DAILY_LIMIT') {\n return 600;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [\n 'exception_class' => get_class($e),\n ]);\n\n return 10;\n }\n\n public function parsePolicy(Throwable $e): ?string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return null;\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return null;\n }\n\n $policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;\n\n return is_string($policy) ? strtoupper($policy) : null;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$response ' . PHP_EOL . print_r($response, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$response ' . PHP_EOL . print_r($response->getResponseHeaders(), true));\n\n return $response->toArray();\n });\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (RateLimitException $e) {\n// throw $e;\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Illuminate\\Support\\Facades\\Redis;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (429) from HubSpot by translating it\n * into a RateLimitException carrying retry_after.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'policy' => $this->parsePolicy($e),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public function parseRetryAfter(Throwable $e): int\n {\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$e ' . PHP_EOL . print_r($e, true));\n return 5;\n\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n $policy = $this->parsePolicy($e);\n if ($policy === 'TEN_SECONDLY_ROLLING') {\n return 10;\n }\n if ($policy === 'SECONDLY') {\n return 1;\n }\n if ($policy === 'DAILY_LIMIT') {\n return 600;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [\n 'exception_class' => get_class($e),\n ]);\n\n return 10;\n }\n\n public function parsePolicy(Throwable $e): ?string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return null;\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return null;\n }\n\n $policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;\n\n return is_string($policy) ? strtoupper($policy) : null;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$response ' . PHP_EOL . print_r($response, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$response ' . PHP_EOL . print_r($response->getResponseHeaders(), true));\n\n return $response->toArray();\n });\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (RateLimitException $e) {\n// throw $e;\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.96276593,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"bounds":{"left":0.61702126,"top":0.0726257,"width":0.38297874,"height":0.9066241},"on_screen":true,"lines":[{"char_start":273,"char_count":32,"bounds":{"left":0.61702126,"top":0.0,"width":0.080119684,"height":0.014365523}},{"char_start":305,"char_count":79,"bounds":{"left":0.61702126,"top":0.0,"width":0.20212767,"height":0.014365523}},{"char_start":384,"char_count":18,"bounds":{"left":0.61702126,"top":0.0,"width":0.043882977,"height":0.014365523}},{"char_start":402,"char_count":21,"bounds":{"left":0.61702126,"top":0.0,"width":0.051861703,"height":0.014365523}},{"char_start":423,"char_count":48,"bounds":{"left":0.61702126,"top":0.0,"width":0.12167553,"height":0.014365523}},{"char_start":471,"char_count":72,"bounds":{"left":0.61702126,"top":0.0015961692,"width":0.18384309,"height":0.014365523}},{"char_start":543,"char_count":40,"bounds":{"left":0.61702126,"top":0.01915403,"width":0.10106383,"height":0.014365523}},{"char_start":583,"char_count":41,"bounds":{"left":0.61702126,"top":0.03671189,"width":0.10372341,"height":0.014365523}},{"char_start":624,"char_count":72,"bounds":{"left":0.61702126,"top":0.054269753,"width":0.18384309,"height":0.014365523}},{"char_start":696,"char_count":219,"bounds":{"left":0.61702126,"top":0.07182761,"width":0.38297874,"height":0.014365523}},{"char_start":915,"char_count":83,"bounds":{"left":0.61702126,"top":0.08938547,"width":0.21243352,"height":0.014365523}},{"char_start":998,"char_count":20,"bounds":{"left":0.61702126,"top":0.10694334,"width":0.04920213,"height":0.014365523}},{"char_start":1018,"char_count":17,"bounds":{"left":0.61702126,"top":0.1245012,"width":0.041223403,"height":0.014365523}},{"char_start":1035,"char_count":203,"bounds":{"left":0.61702126,"top":0.14205906,"width":0.38297874,"height":0.014365523}},{"char_start":1238,"char_count":22,"bounds":{"left":0.61702126,"top":0.15961692,"width":0.05418883,"height":0.014365523}},{"char_start":1260,"char_count":23,"bounds":{"left":0.61702126,"top":0.17717478,"width":0.056848403,"height":0.014365523}},{"char_start":1283,"char_count":10,"bounds":{"left":0.61702126,"top":0.19473264,"width":0.023271276,"height":0.014365523}},{"char_start":1293,"char_count":27,"bounds":{"left":0.61702126,"top":0.2122905,"width":0.06715426,"height":0.014365523}},{"char_start":1320,"char_count":26,"bounds":{"left":0.61702126,"top":0.22984837,"width":0.06482713,"height":0.014365523}},{"char_start":1346,"char_count":23,"bounds":{"left":0.61702126,"top":0.24740623,"width":0.056848403,"height":0.014365523}},{"char_start":1369,"char_count":28,"bounds":{"left":0.61702126,"top":0.26496407,"width":0.06981383,"height":0.014365523}},{"char_start":1397,"char_count":57,"bounds":{"left":0.61702126,"top":0.28252193,"width":0.14494681,"height":0.014365523}}],"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8673868863936031688
|
6378618611371477348
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
3
68
3
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Illuminate\Support\Facades\Redis;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'policy' => $this->parsePolicy($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public function parseRetryAfter(Throwable $e): int
{
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$e ' . PHP_EOL . print_r($e, true));
return 5;
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
$policy = $this->parsePolicy($e);
if ($policy === 'TEN_SECONDLY_ROLLING') {
return 10;
}
if ($policy === 'SECONDLY') {
return 1;
}
if ($policy === 'DAILY_LIMIT') {
return 600;
}
$this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [
'exception_class' => get_class($e),
]);
return 10;
}
public function parsePolicy(Throwable $e): ?string
{
if (! method_exists($e, 'getResponseBody')) {
return null;
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return null;
}
$policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;
return is_string($policy) ? strtoupper($policy) : null;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$response ' . PHP_EOL . print_r($response, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$response ' . PHP_EOL . print_r($response->getResponseHeaders(), true));
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (RateLimitException $e) {
// throw $e;
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
17945
|
NULL
|
NULL
|
NULL
|
|
17947
|
780
|
51
|
2026-05-11T10:42:37.918095+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778496157918_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
3
68
3
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Illuminate\Support\Facades\Redis;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'policy' => $this->parsePolicy($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public function parseRetryAfter(Throwable $e): int
{
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$e ' . PHP_EOL . print_r($e, true));
return 5;
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
$policy = $this->parsePolicy($e);
if ($policy === 'TEN_SECONDLY_ROLLING') {
return 10;
}
if ($policy === 'SECONDLY') {
return 1;
}
if ($policy === 'DAILY_LIMIT') {
return 600;
}
$this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [
'exception_class' => get_class($e),
]);
return 10;
}
public function parsePolicy(Throwable $e): ?string
{
if (! method_exists($e, 'getResponseBody')) {
return null;
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return null;
}
$policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;
return is_string($policy) ? strtoupper($policy) : null;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$response ' . PHP_EOL . print_r($response, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$response ' . PHP_EOL . print_r($response->getResponseHeaders(), true));
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (RateLimitException $e) {
// throw $e;
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Illuminate\\Support\\Facades\\Redis;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (429) from HubSpot by translating it\n * into a RateLimitException carrying retry_after.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'policy' => $this->parsePolicy($e),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public function parseRetryAfter(Throwable $e): int\n {\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$e ' . PHP_EOL . print_r($e, true));\n return 5;\n\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n $policy = $this->parsePolicy($e);\n if ($policy === 'TEN_SECONDLY_ROLLING') {\n return 10;\n }\n if ($policy === 'SECONDLY') {\n return 1;\n }\n if ($policy === 'DAILY_LIMIT') {\n return 600;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [\n 'exception_class' => get_class($e),\n ]);\n\n return 10;\n }\n\n public function parsePolicy(Throwable $e): ?string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return null;\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return null;\n }\n\n $policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;\n\n return is_string($policy) ? strtoupper($policy) : null;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$response ' . PHP_EOL . print_r($response, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$response ' . PHP_EOL . print_r($response->getResponseHeaders(), true));\n\n return $response->toArray();\n });\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (RateLimitException $e) {\n// throw $e;\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Illuminate\\Support\\Facades\\Redis;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (429) from HubSpot by translating it\n * into a RateLimitException carrying retry_after.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'policy' => $this->parsePolicy($e),\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public function parseRetryAfter(Throwable $e): int\n {\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$e ' . PHP_EOL . print_r($e, true));\n return 5;\n\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n $policy = $this->parsePolicy($e);\n if ($policy === 'TEN_SECONDLY_ROLLING') {\n return 10;\n }\n if ($policy === 'SECONDLY') {\n return 1;\n }\n if ($policy === 'DAILY_LIMIT') {\n return 600;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [\n 'exception_class' => get_class($e),\n ]);\n\n return 10;\n }\n\n public function parsePolicy(Throwable $e): ?string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return null;\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return null;\n }\n\n $policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;\n\n return is_string($policy) ? strtoupper($policy) : null;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$response ' . PHP_EOL . print_r($response, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$response ' . PHP_EOL . print_r($response->getResponseHeaders(), true));\n\n return $response->toArray();\n });\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n// } catch (RateLimitException $e) {\n// throw $e;\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"19","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","depth":4,"on_screen":true,"value":"[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {\n\"headers\":{\n\"Date\":[\"Thu,07 May 2026 14:21:15 GMT\"],\n \"Content-Type\":[\"application/json;charset=utf-8\"],\n \"Transfer-Encoding\":[\"chunked\"],\n \"Connection\":[\"keep-alive\"],\n \"CF-Ray\":[\"9f80deb8db60dc3a-SOF\"],\n \"CF-Cache-Status\":[\"DYNAMIC\"],\n \"Strict-Transport-Security\":[\"max-age=31536000; includeSubDomains; preload\"],\n \"Vary\":[\"origin,\n accept-encoding\"],\n \"access-control-allow-credentials\":[\"false\"],\n \"server-timing\":[\"hcid;desc=\\\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\\\",\n cfr;desc=\\\"9f80deb8e7c6dc3a-IAD\\\"\"],\n \"x-content-type-options\":[\"nosniff\"],\n \"x-hubspot-correlation-id\":[\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\"],\n \"Set-Cookie\":[\"__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-1.0.1.1-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,\n 07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None\"],\n \"Report-To\":[\"{\n\\\"endpoints\\\":[{\n\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\\\"}],\n\\\"group\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"NEL\":[\"{\n\\\"success_fraction\\\":0.01,\n\\\"report_to\\\":\\\"cf-nel\\\",\n\\\"max_age\\\":604800}\"],\n\"Server\":[\"cloudflare\"]}} {\n\"correlation_id\":\"95236535-ec98-4541-b92a-adfa73b69eab\",\n\"trace_id\":\"c7ab8365-903f-46d4-9403-0e5b551e3545\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8673868863936031688
|
6378618611371477348
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
3
68
3
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Illuminate\Support\Facades\Redis;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'policy' => $this->parsePolicy($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public function parseRetryAfter(Throwable $e): int
{
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$e ' . PHP_EOL . print_r($e, true));
return 5;
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
$policy = $this->parsePolicy($e);
if ($policy === 'TEN_SECONDLY_ROLLING') {
return 10;
}
if ($policy === 'SECONDLY') {
return 1;
}
if ($policy === 'DAILY_LIMIT') {
return 600;
}
$this->log->warning('[Hubspot] No retry-after header or policy name found, using default', [
'exception_class' => get_class($e),
]);
return 10;
}
public function parsePolicy(Throwable $e): ?string
{
if (! method_exists($e, 'getResponseBody')) {
return null;
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return null;
}
$policy = $body['policyName'] ?? $body['policy'] ?? $body['context']['policyName'] ?? null;
return is_string($policy) ? strtoupper($policy) : null;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$response ' . PHP_EOL . print_r($response, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$response ' . PHP_EOL . print_r($response->getResponseHeaders(), true));
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
// } catch (RateLimitException $e) {
// throw $e;
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
19
Previous Highlighted Error
Next Highlighted Error
[2026-05-07 14:21:15] local.INFO: [Hubspot] DEBUG Getting headers {
"headers":{
"Date":["Thu,07 May 2026 14:21:15 GMT"],
"Content-Type":["application/json;charset=utf-8"],
"Transfer-Encoding":["chunked"],
"Connection":["keep-alive"],
"CF-Ray":["9f80deb8db60dc3a-SOF"],
"CF-Cache-Status":["DYNAMIC"],
"Strict-Transport-Security":["max-age=31536000; includeSubDomains; preload"],
"Vary":["origin,
accept-encoding"],
"access-control-allow-credentials":["false"],
"server-timing":["hcid;desc=\"019e02d0-6fd8-7812-bdba-885b7ccb3ee3\",
cfr;desc=\"9f80deb8e7c6dc3a-IAD\""],
"x-content-type-options":["nosniff"],
"x-hubspot-correlation-id":["019e02d0-6fd8-7812-bdba-885b7ccb3ee3"],
"Set-Cookie":["__cf_bm=SIUrtdQgXVrik50pdqF6hZVYKhzTnQBidvMabeCtm0Y-1778163675-[IP_ADDRESS]-rI.ZggtDKxTge5zr8_2gbBfWMQQ.ufZEXDZyHz2mBUFdzdo2gTHEsOkXMSEShjK0hGYxNhUGM1ZoBpX7BcFZcHEjA7Cs_.SMUhUnd2nYjko; path=/; expires=Thu,
07-May-26 14:51:15 GMT; domain=.hubapi.com; HttpOnly; Secure; SameSite=None"],
"Report-To":["{
\"endpoints\":[{
\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=NYAlsVTP0fYm32qrSDjxYE4sd2RWRqiSp3wHsmdEgZlzoYdxI%2BIxVpHmsKn3O%2BKVA3mFIJ2m7YRECDGSM%2BW2IYTzo6FM4%2BdUIjURO8srzKSvJgZ%2BQ6R79arKQw3uHLlX\"}],
\"group\":\"cf-nel\",
\"max_age\":604800}"],
"NEL":["{
\"success_fraction\":0.01,
\"report_to\":\"cf-nel\",
\"max_age\":604800}"],
"Server":["cloudflare"]}} {
"correlation_id":"95236535-ec98-4541-b92a-adfa73b69eab",
"trace_id":"c7ab8365-903f-46d4-9403-0e5b551e3545"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
17943
|
NULL
|
NULL
|
NULL
|
|
19602
|
838
|
7
|
2026-05-11T13:09:28.239460+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778504968239_m1.jpg...
|
PhpStorm
|
faVsco.js – HubspotPaginationServiceTest.php
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HubspotPaginationServiceTest
Run 'HubspotPaginationServiceTest'
Debug 'HubspotPaginationServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HubspotPaginationServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HubspotPaginationServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HubspotPaginationServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8673493715754241057
|
-2403513664269055550
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HubspotPaginationServiceTest
Run 'HubspotPaginationServiceTest'
Debug 'HubspotPaginationServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
SlackFileEditViewGoHistoryWindowHelpAPPDOCKER- ₴81DEV (docker)₴2APP (-zsh)-zsh* @param string SobjectType The object type('deals''companies''contacts''cal)* @param array<string, mixed>Spayload Thesearch payload with filters, sorts, prop‹* @return array The search response with'results''total''paging'keys* @throws RateLimitException When rate limit is hit* @throws HubspotException On API errors* @return array The search response with 'results', 'total', 'paging' keys*/public function search(string SobjectType, array Spayload): arrayend diff4) app/Console/Commands/JiminnyDebugCommand.php (statement_indentation)begin diff --/home/jiminny/app/Console/Commands/JiminnyDebugCommand.php+++/home/jiminny/app/Console/Commands/JiminnyDebugCommand.php-359,11+359,11 @ScrmService = ScrmResolver->prepareCrmService);-//-/1for ($i = 0; si < 3; Si++) {if (Si % 250) {Sthis->info("Syncing opportunity {Si}");Sthis->info("Matching contact {$i}");-1/-1/.+++++ScrmService->syncOpportunity('374720564');if ($i % 25=0{//Sthis->info("Syncing opportunity {$i}");Sthis->info("Matching contact {$i}");////}ScrmService->syncOpportunity('374720564');$crmService->matchByName('Robot');end diffFixed 4 of 5666 files in 146.870 seconds, 60.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any containeror image →Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-lirHomeDMsActivityFilesLater..•More(abl• [Platform) Refinemen... now100% C8• Mon 11 May 16:09:28→Describe what you are looking forJiminny ...# contusion-clinic# curiosity_lab# engineering# general# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of_jimi...^ Direct messagesP. Aneliya Angelova®. Galya DimitrovaPetko Kashinski&. Stefka StoyanovaVasil Vasilev&. Nikolay IvanovAneliya Angelova, ...Stoyan Tanev• VesE Lukas Kovalik y... 0E:: AppsS Jira CloudToastGanala Cala# releases8 226 0• Messages+C Files• Bookmarks20832): RemoveToday ~ ok 4.0 and 4.1 models(#506) (steliyan-g)NewGitHub APP 2:13 PM9 new commits pushed to master by ilian-jiminny861859d2 - Stop sending signals to datadog forincresed/ decreased workers.23ad2bb1 - Drop usage of RunForSeconds.3aedca4a - Generage Workerld on the fly.86cb0855 - ignore-missing-request-id-on-transcript Handle wrong format for assemblytranscriptions, this happends for old activitiesthat had a different provider and were updatedto point to Assembly when the providers weredeleted49ca4dfe - ignore-missing-request-id-on-transcript added log importShow morejiminny/app| Added by GitHubCircleCI APP 2:38 PMDeployment Successful!Project: appWhen:05/11/202611:38:14Tag:View JobMessage #releases+..•...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
19603
|
839
|
9
|
2026-05-11T13:09:28.264402+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778504968264_m2.jpg...
|
PhpStorm
|
faVsco.js – HubspotPaginationServiceTest.php
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HubspotPaginationServiceTest
Run 'HubspotPaginationServiceTest'
Debug 'HubspotPaginationServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.82081115,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HubspotPaginationServiceTest","depth":6,"bounds":{"left":0.83610374,"top":0.019952115,"width":0.07945479,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HubspotPaginationServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HubspotPaginationServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8673493715754241057
|
-2403513664269055550
|
visual_change
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HubspotPaginationServiceTest
Run 'HubspotPaginationServiceTest'
Debug 'HubspotPaginationServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
PhostormVIewINavicareCodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-limProiectC) MatchActivityCrmDataTest.php> • Telephony© HubspotPaginationService.php© TrackAutomatedReportGeneratedEvent.php©UserAutomatedReportsController.php>m Usen© Hubspot/service.ong(ci ImoortRecallA|Recordinc© SqsVisibilityControlTest © JiminnyDebugCommand.phpT DeleteCrmEntityTrait.phpv Ml ictenerc© HandleHubspotRateLimitTest.php© Job.php>@ Activities>@ AudioRateLimitException.php(C) HandleHubspotRateLimit.phpC) Client.php(C) Kernel.php> @ AutomatedReports(C) CrmobiectsResolver.pho(C) ProviderRateLimiter.php(C) PaqinationContia.php@ AutoScore>@ Crmk?php_Dealkisksdeciare (strict tvneset).› U clasticsearchE Groupsnamespace Tests \Unit\Services\Crm\Hubspot \Pagination;• ImoorC MailboxOpportunities› use ...0 Plavlists18v class HubspotPaginationServiceTest extends TestCaseu) TeamsM TranscrintionTl usages→hUsersprivate HubspotPaginationService $paginationService:N Webhook1m7 Mail/** @var LoggerInterface&Mock0bject *M Models13 usages1 Notificationsprivate LoqgerInterface $loggerMock:M ObserversM Policios/** @var Client&Mock0biect */m Providers28 usagesm Penocitoriocprivate Client Sclientlock:m PulesServices** ovar contiquration&lockibiect *)M Activitvm Activity Drovidorcorivate Confiauration Sconfialock:>@ AvatarCJ Calendar>C Conference** ovar TeomsMocklhiect *v berm>0 Bullhornprivate Team SteamMock;close34 6t°protected function setUp: void>C Copper› crmobiects→D Heloers)Sthis->loggerMock = $this->createMock( originalClassName: LoggerInterface::class):$this->paginationService = new HubspotPaginationService($this->loggerMock);v =uosoot> ActionsSthic-scljontMock = C+hic-senonteMockl oridinalClascName• C1jent..clace)•> ODTO• M Fields•0 Journal.Sthis->configMock = $this->createMock( originalClassName: Configuration::class):Sthic-stoamMoch = Cthic-ScnontoMockt oridinalClascName. Toam•.clace)•› M OpportunitvSvncsv MDaginationc HubsnotPadin:Sthis->teamMock->method( constraint: 'qetid')->willReturn( value: 123) :Sthis->configMock->method( constraint: 'getTeam')-›willReturn($this->teamMock):ererneranmese adlemhnerethr'getConfia')->willReturn(Sthis->confiqMock):( DaginationConch PadinationStat→ M DrosnentSearchSTacts failed. 10 naccod- 012 minutes aaol#[Platform] Refinemen... now100% C49. Mon 11 May 16:09:284 HS_local [jiminny@localhost]Aconsole [pRODltconsole [EUi© PlaybackController.phpA console [STAGING]© MatchCrmData.php174217431744A5417 A v1174517461747-1748176217641765176717691770= 17711 1773)=177412020-00-11 11.21.40l Local.eNru. Lnubspor Journal rocuing No aauaf"correlation_id": "954d156d-8a4f-45."[2026-05-11 11:21:451 LocaZ.WARNING: [HubSpot Journal Polling) Maximum empty results reached, stopping f'empty[2026-05-11 11:21:45] local.WARNING: [HubSpot Journal Pollingl Maximum empty results reached, stopping {"empty[2026-05-11 11:21:45] local.INF0: [HubSpot Journal Pollingl Service ending {"runtime_seconds":57 "total_cycles[2026-05-11 11:21:46] local.INF0: [HubSpot Journal Pollingl Saved offset to database on cleanup {"offset":"019[2026-05-11 11:21:46] local.INF0:[HubSpot Journal Pollingl Released polling lock {"correlation_id":"954d156dand::run Memory usage before starting command {"2026-05-11 11.21.48 LocaL.LNFU:[2026-05-11 11:21:481 local.INF0:2826-05-11 11:21:4811[2026-05-11 11:21:481 local.INF0:""host":"docker_lamp_1""processed":0;2826-05-11 11:21:59 Local.INF0:[2026-05-11 11:22:001Memory usage before starting command {"ands\Command: :run Memory usage for command {"command" : "aLocaLiNFi: Sunchuospotibnectsi Startina sunc <"team":"020115e0-93ce-4010-929c-1757570782026-05-11 11:22:001[2026-05-11 11:22:00]2026-05-11 11:22:001 Local.TNF0:is not connected. attemotina team memben[CrmOwnerResolver] No team membens found with active erm connection {"erm ordCrm0wnerResolver] No team member found wilth active erm connection «"crm orov[2026-05-11 11:22:00] local.INF0:[SyncHubspot0bjects] Sync finished {"team":"b2b115eb-93ce-4d1b-929c-173757df82926-05-11 11•22•9911Tocal. TASh•Svncluhsnotnhnectcl Stantina cvnc "teaml.llahap74h8-hfa8-4383-0a7f-80F4hf2hd[2026-05-11 11:22:00] local.INFO:[SocialAccountService] Fetching token {"socialAccountId":1499, "provider" : "hub2026-05-11 11•22•001 1oca1 TNS0• [SocialAccountSenvice] Token notnieved &isocialAccounttd"•1409 "nnoviden"•"[2026-05-11 11:22:00] local.INF0:[EncryptedTokenManager] Generating access token. {"mode":"Legacy"} {"correl2026-05-11 11-22-001 Tocal TAE0-[CrmOwnerResolver] Integration owner matched as CRM Owner f"crm_providen": "hu[2026-05-11 11:22:00] local.INF0:[HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"con2926-05-11 11-22-011 Tocal TAS0•Huhsnot Padination comnleted|[2026-05-11 11:22:01] Local.INFO: [HubSpot] Synced opportunities f"team":2, "strategies":"lastModified" "sync_C6[2026-05-11 11:22:01] local.INF0: [SyncHubspot0bjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bd[2026-05-11 11:22:01] local.INF0: [SyncHubspot0biects] Starting sync {"team":"c6b9d6b0-b48d-4832-a68c-a57d6065a[2026-05-11 11:22:01] local.WARNING: [HubSpot] Account not connected for user {"userId": "71e3aac5-fb66-47c5-a23[2026-05-11 11:22:01] local.INF0: [Crm0wnerResolver] Integration owner is not connected, attempting team memben2026-05-11 11:22:01 Local.INFU:[CrmOwnerResolver] No team members found with active crm connection {"crm_ pro[2026-05-11 11:22:01] Local.INF0:[CrmOwnerResolver] No team member found with active crm connection {"crm_prov2026-05-11 11:22:0111[SyncHubspot0biects] Sync finished {"team":"c6b9d6b0-b48d-4832-a68c-a57d606512026-05-11 11:22:011 Local.INFU:SynchubspotubnectsStarting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e2026-05-11 14:22:0111ected for usen {"userId"."2ac0447f-3c8c-4ce0-bae2026-05-11 14:22:01 LOCOLINFOYermownerResoverintearationowner is not connected. attemotind team memben2026-05-11 11:22:01 LocaL.INFO:found with active crm connection {"crm ord2026-05-11 11:22:011 LocaL.INF0:CrmOwnerResolver Noteam member found with active crm connection "crm orov2026-05-11 11:22:011 LocaL.INFO:2026-05-11 11:23:061 LocaL.INF0:mand::run Memory usage before startina command "[ScheduleRotCommandl Numben of activities to he cantuned. olMemony usade Fon command « "commandil « "lmeMemory usage before starting command {"liminnv| Concole| Commande\ Command• •pun Memony ucage fon command §"commandi. "d_iconnplation id"."6d366728-00h2-43d4-0h02-8e0d3d01d0ap"mmlocal.INF0: Jiminny \Console \Commands\Command::run Memory usage before starting command &Cl18 11.22 111Moee2TME.IininnsleoneolelFonmendeleonmendnuMnynт-1HubSpot Rate Limit R+0.Ok Where is it used. will I break somethina it is renlace LodicSycention with RuntimeSxcention in RateL imitExcention?Searched RateLimitException in ~/iminnylapp (php) (44)Searched throw new RateLimit Excention and pertormed 1 other auervYour included daily usage quota is exhausted. Purchase extra usage to continue using premium models. Quota resets Mayrnl .A Your included daily usage quota is exhausted. Purchase extra usage to continue using premium models. Quota resets May 12, 11:00Ask anvthina (&4L)« Codec AdantiveWN Windsurf Toams 1-1 UTF.8 Al A enadoe...
|
19601
|
NULL
|
NULL
|
NULL
|
|
7835
|
350
|
8
|
2026-05-08T09:34:54.727973+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778232894727_m2.jpg...
|
Firefox
|
Jy 20493 smart instant nudge pre filtering by niko Jy 20493 smart instant nudge pre filtering by nikolaybiaivanov · Pull Request #12053 · jiminny/app — Work...
|
True
|
github.com/jiminny/app/pull/12053/changes#r3207759 github.com/jiminny/app/pull/12053/changes#r3207759305...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 3 Q2 - Platform Team - Scrum Board Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app
Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app
Illuminate\Queue\MaxAttemptsExceededException: Jiminny\Jobs\Activity\DeleteTeamChurnData has been attempted too many times. — jiminny — app
Illuminate\Queue\MaxAttemptsExceededException: Jiminny\Jobs\Activity\DeleteTeamChurnData has been attempted too many times. — jiminny — app
JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app
JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app
Userpilot | Ask Jiminny Report Generated
Userpilot | Ask Jiminny Report Generated
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.24700798,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.26030585,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"bounds":{"left":0.24700798,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"bounds":{"left":0.26030585,"top":0.09577015,"width":0.4644282,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.24700798,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.26030585,"top":0.12849163,"width":0.10721409,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app","depth":4,"bounds":{"left":0.24700798,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app","depth":5,"bounds":{"left":0.26030585,"top":0.16121309,"width":0.17037898,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Illuminate\\Queue\\MaxAttemptsExceededException: Jiminny\\Jobs\\Activity\\DeleteTeamChurnData has been attempted too many times. — jiminny — app","depth":4,"bounds":{"left":0.24700798,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Illuminate\\Queue\\MaxAttemptsExceededException: Jiminny\\Jobs\\Activity\\DeleteTeamChurnData has been attempted too many times. — jiminny — app","depth":5,"bounds":{"left":0.26030585,"top":0.19393456,"width":0.2606383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app","depth":4,"bounds":{"left":0.24700798,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app","depth":5,"bounds":{"left":0.26030585,"top":0.22665602,"width":0.18899602,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Userpilot | Ask Jiminny Report Generated","depth":4,"bounds":{"left":0.24700798,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Userpilot | Ask Jiminny Report Generated","depth":5,"bounds":{"left":0.26030585,"top":0.25937748,"width":0.07164229,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":4,"bounds":{"left":0.24700798,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":5,"bounds":{"left":0.26030585,"top":0.29209897,"width":0.19331782,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8673278766623142337
|
-3006598008080404352
|
click
|
accessibility
|
NULL
|
Platform Sprint 3 Q2 - Platform Team - Scrum Board Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app
Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app
Illuminate\Queue\MaxAttemptsExceededException: Jiminny\Jobs\Activity\DeleteTeamChurnData has been attempted too many times. — jiminny — app
Illuminate\Queue\MaxAttemptsExceededException: Jiminny\Jobs\Activity\DeleteTeamChurnData has been attempted too many times. — jiminny — app
JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app
JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app
Userpilot | Ask Jiminny Report Generated
Userpilot | Ask Jiminny Report Generated
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
26664
|
1104
|
8
|
2026-05-12T12:54:21.892581+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778590461892_m1.jpg...
|
Slack
|
releases (Channel) - Jiminny Inc - 4 new items - S releases (Channel) - Jiminny Inc - 4 new items - Slack...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Galya Dimitrova
Steliyan Georgiev
Petko Kashinski
Aneliya Angelova
Stefka Stoyanova
Vasil Vasilev
Nikolay Ivanov
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Stoyan Tanev
Lukas Kovalik
you
Jira Cloud
Toast
Google Calendar
Messages
Messages
Files
Files
Bookmarks
Bookmarks
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
GitHub
APP
Today at 2:14:55 PM
2:14 PM
4 new commits
4 new commits
pushed to
master
master
by
LakyLak
LakyLak
6bd41c89
6bd41c89
- JY-20773 fix user pilot tracking ofr automated report generated
5b2c9228
5b2c9228
- Merge branch 'master' into JY-20773-fix-automated-reports-user-pilot-tracking
62861fa2
62861fa2
- Merge branch 'master' into JY-20773-fix-automated-reports-user-pilot-tracking
a8b76812
a8b76812
- Merge pull request #12024 from jiminny/JY-20773-fix-automated-reports-user-pilot-tracking
jiminny/app
jiminny/app
|
Added by
GitHub
GitHub
CircleCI
APP
Today at 2:41:02 PM
2:41 PM
Deployment Successful! tada emoji
Deployment Successful!
Project
: app
When
: 05/12/2026 11:41:02
Tag
:
View Job
View Job
GitHub
APP
Today at 2:50:53 PM
2:50 PM
5 new commits
5 new commits
pushed to
master
master
by
ilian-jiminny
ilian-jiminny
1162b043
1162b043
- fix(security): bump dependencies (alerts #477)
2f0ca3a0
2f0ca3a0
- Merge branch 'master' into secfix/composer-20260507
f861c9e7
f861c9e7
- Merge branch 'master' into secfix/composer-20260507
9b89679e
9b89679e
- Merge branch 'master' into secfix/composer-20260507
4cb55bd1
4cb55bd1
- Merge pull request #12049 from jiminny/secfix/composer-20260507
jiminny/app
jiminny/app
|
Added by
GitHub
GitHub
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
New
CircleCI
APP
Today at 3:17:32 PM
3:17 PM
Deployment Successful! tada emoji
Deployment Successful!
Project
: app
When
: 05/12/2026 12:17:31
Tag
:
View Job
View Job
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Processing uploaded file… complete! Message ready to be sent.
Channel releases
Stoyan Tanev...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Petko Kashinski","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Google Calendar","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":17,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":17,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Bookmarks","depth":17,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Bookmarks","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":17,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":22,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"GitHub","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"APP","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Today at 2:14:55 PM","depth":23,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:14 PM","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"4 new commits","depth":23,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4 new commits","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pushed to","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"master","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"master","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"by","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"LakyLak","depth":23,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"LakyLak","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"6bd41c89","depth":26,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6bd41c89","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"- JY-20773 fix user pilot tracking ofr automated report generated","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"5b2c9228","depth":26,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5b2c9228","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"- Merge branch 'master' into JY-20773-fix-automated-reports-user-pilot-tracking","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"62861fa2","depth":26,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"62861fa2","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"- Merge branch 'master' into JY-20773-fix-automated-reports-user-pilot-tracking","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"a8b76812","depth":26,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"a8b76812","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"- Merge pull request #12024 from jiminny/JY-20773-fix-automated-reports-user-pilot-tracking","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"jiminny/app","depth":25,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"jiminny/app","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"|","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Added by","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"GitHub","depth":25,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"GitHub","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"CircleCI","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"APP","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Today at 2:41:02 PM","depth":23,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:41 PM","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Deployment Successful! tada emoji","depth":23,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Deployment Successful!","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Project","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":": app","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"When","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":": 05/12/2026 11:41:02","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tag","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":":","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"View Job","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"View Job","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"GitHub","depth":23,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"APP","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 2:50:53 PM","depth":23,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:50 PM","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"5 new commits","depth":23,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5 new commits","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pushed to","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"master","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"master","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"by","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"ilian-jiminny","depth":23,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"ilian-jiminny","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"1162b043","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1162b043","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"- fix(security): bump dependencies (alerts #477)","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"2f0ca3a0","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2f0ca3a0","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"- Merge branch 'master' into secfix/composer-20260507","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"f861c9e7","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"f861c9e7","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"- Merge branch 'master' into secfix/composer-20260507","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"9b89679e","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"9b89679e","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"- Merge branch 'master' into secfix/composer-20260507","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"4cb55bd1","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4cb55bd1","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"- Merge pull request #12049 from jiminny/secfix/composer-20260507","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"jiminny/app","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"jiminny/app","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"|","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Added by","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"GitHub","depth":25,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"GitHub","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":25,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"New","depth":21,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"CircleCI","depth":23,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"APP","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 3:17:32 PM","depth":23,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3:17 PM","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Deployment Successful! tada emoji","depth":23,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"Deployment Successful!","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Project","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":": app","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"When","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":": 05/12/2026 12:17:31","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Tag","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":":","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"View Job","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"View Job","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":25,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"","depth":23,"on_screen":true,"value":"","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Processing uploaded file… complete! Message ready to be sent.","depth":11,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Channel releases","depth":11,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":13,"on_screen":true,"role_description":"text"}]...
|
8671540456611526567
|
-3568657452915450799
|
click
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Galya Dimitrova
Steliyan Georgiev
Petko Kashinski
Aneliya Angelova
Stefka Stoyanova
Vasil Vasilev
Nikolay Ivanov
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Stoyan Tanev
Lukas Kovalik
you
Jira Cloud
Toast
Google Calendar
Messages
Messages
Files
Files
Bookmarks
Bookmarks
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
GitHub
APP
Today at 2:14:55 PM
2:14 PM
4 new commits
4 new commits
pushed to
master
master
by
LakyLak
LakyLak
6bd41c89
6bd41c89
- JY-20773 fix user pilot tracking ofr automated report generated
5b2c9228
5b2c9228
- Merge branch 'master' into JY-20773-fix-automated-reports-user-pilot-tracking
62861fa2
62861fa2
- Merge branch 'master' into JY-20773-fix-automated-reports-user-pilot-tracking
a8b76812
a8b76812
- Merge pull request #12024 from jiminny/JY-20773-fix-automated-reports-user-pilot-tracking
jiminny/app
jiminny/app
|
Added by
GitHub
GitHub
CircleCI
APP
Today at 2:41:02 PM
2:41 PM
Deployment Successful! tada emoji
Deployment Successful!
Project
: app
When
: 05/12/2026 11:41:02
Tag
:
View Job
View Job
GitHub
APP
Today at 2:50:53 PM
2:50 PM
5 new commits
5 new commits
pushed to
master
master
by
ilian-jiminny
ilian-jiminny
1162b043
1162b043
- fix(security): bump dependencies (alerts #477)
2f0ca3a0
2f0ca3a0
- Merge branch 'master' into secfix/composer-20260507
f861c9e7
f861c9e7
- Merge branch 'master' into secfix/composer-20260507
9b89679e
9b89679e
- Merge branch 'master' into secfix/composer-20260507
4cb55bd1
4cb55bd1
- Merge pull request #12049 from jiminny/secfix/composer-20260507
jiminny/app
jiminny/app
|
Added by
GitHub
GitHub
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
New
CircleCI
APP
Today at 3:17:32 PM
3:17 PM
Deployment Successful! tada emoji
Deployment Successful!
Project
: app
When
: 05/12/2026 12:17:31
Tag
:
View Job
View Job
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Processing uploaded file… complete! Message ready to be sent.
Channel releases
Stoyan Tanev
SlackFileEditViewGoHistoryWindowHelpRetro - Platform • in 1h 6 mAsshDOCKER• 81DEV (-zsh)О ₴2APP (-zsh)• *[EMAIL]@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe/data $ cd ..[EMAIL] $ nasAdm1n@DXP4800PLUS-B5F8: ~$cd/volumel/screenpipe/Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipes 1ltotal26Gdrwxrwxrwx+1rootroot410 May1215:15drwxr-xr-xrootroot450 Apr2519:39drwxrwxrwx+1Adminadmin202 Apr2620:10drwxrwxrwx+1Adminadmin298 May1013:46drwxrwxrwx+Adminadmin144 May09:41drwxrwxrwx+1Admin admin70 May1013:47drwxrwxrwx+1Adminadmin164 Apr1116:51drwxrwxrwx+1rootroot5.1KMay1120:55-rwxrwxrwx+1rootroot31Apr1817:42app_settings.json1Adminadmin13G May1120:55archive.db-rwxrwxrwx+1Adminadmin11G May10-rwxrwxrwx+Adm1n admin 3.5G May1112:31archive.db-bak20:15db.sqlite-rwxrwxrwx+1Admin admin32K May1205:48db.sqlite-shm-rwxrwxrwx+ 1Admin admin0 Apr 26 17:17db.sqlite-wal1Admin admin11K May 12 09:09.DS_Store-rwxrwxrwx+ 1 Admin admin219 Apr24 19:33•gitignore-rwxrwxrWx+1 Admin admin0 Apr1317:21screenpipe.db-rwxrwxrwx+1 Admin admin 8.4K May12 15:15screenpipe_fts_migrate.sh-rwxrwxrwx+ 1 Admin admin32K May 11 20:48screenpipe_sync.sh-rwxrwxrwx+ 1 Admin admin20K May 10 13:06screenpipe_sync_updated.shAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.dbarchive.db.bak-pre-installidAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipes ./screenpipe_fts_migrate.sh archive.dbScreenpipe FTS migrationDB:archive.dbSize: 13G• ×4-zsh• 285screenpipe"O 886ssh100% <78•Tue 12 May 15:54:2118187-zsh• *8+• Creating install registry_installs table• Om01s• Adding install_id to base tablesvideo_chunksalready presentError: stepping, UNIQUEconstraintfailed: video_chunks.install_id, video_chunks.id (19)Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipes sqlite3 archive.db "SELECT * FROM_installs;"Adm1neDXP4800PLUS-B5F8:/volume1/screenpipes sqlite3 archive.db "SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;"Error: in prepare, no such column: install_idSELECT install_id,COUNT(*) FROM frames GROUP BY install_id;^_-- error hereAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipes |...
|
26661
|
NULL
|
NULL
|
NULL
|
|
25465
|
1070
|
8
|
2026-05-12T11:26:13.071040+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778585173071_m1.jpg...
|
Firefox
|
DXP4800PLUS-B5F8 — Personal
|
True
|
nas.lakylak.xyz/desktop/#/
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Screenpipe — Archive
Screenpipe — Archive
All docs Screenpipe — Archive
Screenpipe — Archive
All docs · AFFiNE
All docs · AFFiNE
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Close tab
New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
14.4
KB/s
12.7
KB/s
Files
Control Panel
Storage
App Center
Logs
Support
Task Manager
Music
Cloud Drives
Theater
Photos
Online Office
TextEdit
Virtual Machine
Downloads...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All docs · AFFiNE","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All docs · AFFiNE","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.48576388,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.5086806,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.53194445,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.5552083,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.5784722,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14.4","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KB/s","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12.7","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KB/s","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Files","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Control Panel","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Storage","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"App Center","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Logs","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Support","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Task Manager","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Music","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cloud Drives","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Theater","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Photos","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online Office","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TextEdit","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Virtual Machine","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Downloads","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8670692878220316642
|
528500174710952908
|
click
|
accessibility
|
NULL
|
Screenpipe — Archive
Screenpipe — Archive
All docs Screenpipe — Archive
Screenpipe — Archive
All docs · AFFiNE
All docs · AFFiNE
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Close tab
New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
14.4
KB/s
12.7
KB/s
Files
Control Panel
Storage
App Center
Logs
Support
Task Manager
Music
Cloud Drives
Theater
Photos
Online Office
TextEdit
Virtual Machine
Downloads...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
17519
|
772
|
55
|
2026-05-11T10:24:45.356578+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778495085356_m1.jpg...
|
Firefox
|
Screenpipe — Archive — Personal
|
True
|
app.screenpipe.lakylak.xyz
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
Monitor
Jump to
--
:
--
Go
APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN
−
1×
+
Follow
Follow
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
14:30
15:00
15:30
16:00
16:30
17:00
17:30
18:00
18:30
19:00
19:30
20:00
20:30
21:00
21:30
Click the timeline to start playback...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.043402776,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.06631944,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.08958333,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.112847224,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.13611111,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Screenpipe [archive.db · 12323.6MB]","depth":7,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screenpipe","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[archive.db · 12323.6MB]","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Activity","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Audio","depth":7,"on_screen":true,"help_text":"No audio data in this database","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Work Report","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Timetable","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Summary","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Date","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"07","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Monitor","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jump to","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Go","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"−","depth":9,"on_screen":true,"help_text":"Zoom out","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1×","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"+","depth":9,"on_screen":true,"help_text":"Zoom in","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Follow","depth":10,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Follow","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:00","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:30","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Click the timeline to start playback","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8669940393687974418
|
-1278982523031006823
|
click
|
accessibility
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 12323.6MB]
Screenpipe
[archive.db · 12323.6MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
07
/
05
/
2026
Calendar
Monitor
Jump to
--
:
--
Go
APP TIMELINE · CLICK TO PLAY · DRAG SCROLLBAR TO PAN
−
1×
+
Follow
Follow
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
14:30
15:00
15:30
16:00
16:30
17:00
17:30
18:00
18:30
19:00
19:30
20:00
20:30
21:00
21:30
Click the timeline to start playback...
|
17516
|
NULL
|
NULL
|
NULL
|
|
17301
|
769
|
53
|
2026-05-11T10:16:01.882482+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778494561882_m2.jpg...
|
Notion Calendar
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rostmanFavouritesjiminny(®) AirDrop• RecentsA Appl rostmanFavouritesjiminny(®) AirDrop• RecentsA Applications9 Documents• Downloadsii lukasIcloud• iCloud Drive992 Svnc toldeLocations0 DXP4800PLUS-B5F A49 Network• CRM• Orange|• Red• Yellow• Greer• Blue• Purple• All lags..caltVIewWindowmelpscreenpipearchive.db• #recycledb.sqlite-shmdb.sqlitevi loassync.log• screenpipe.2026-05-07.0.1ogv data•2026-05-072026-05-062026-04.292026-04-27> 2026-04-25•2026-04-24> 2026-04-22• 2026-04-232026-04-20• 2026.04.212026-04-172026-04-16• 2026-04-15• 2026-04-14screenpipe_sync_updated.sharchive.db-oak>?app• db.sqlite-walscreenpipe_sync.shann cettinas ison• screenpipe.db›_pipes*x Hubspot v• SearchYour team is now on the Free plan with 1 admin. You retain editing access and other members are read-only. View team permissions to see who can edit, or upgrade to restore collaborationCOLLECTIONSy dEt Readse An error occurredee; successtul operation> DEL Archive>PATCH UpdateGET List>POST Createpost Filter. Sort and Search CRM Obiectseg. successful operationge. An error occurred.> CRM Owners• CRM Pinelinec› Deals• Engagements>D OLD ENGAGEMENTSGET list meetingsPOST search modified companiesPOSt soarch tacksGat read calli> poST sparch callGat list callsPOST meptinas scheduledGat aet meetinoPost aet link to tackPost create contact with AssociationHubsnotv Iteration run HSv GET Read Copyce. An error occurred.se successful operationv Iteration run Search HSPOST search contact by email Copy> Journal & webhoooks v4> ©Authl› PropertiesSEARCHpoSt search contact bv nhoneSustem Resource WarningGET next offsetPOST Read a batch of obiecPOST Read a batch of assorGET ReadНІP CRM Objects › crm/v3/objects/{object Type) › {object Id) › ReadKoaseurl)) /crm/vs/odjects/ :objectlype /:objectldE Docs Params • Authorization • Headers 9 Body Scripts Settingswuery ParamspropertiespropertiesassociationspaginateAssociationsarchivedidPropertyPath VariablesobiectlvpePesnonce3 History vSustem resources are constrained. Thesystem may not be able to generate the loadeded for this test and the cest is likely toe Connect Git = Concole 5.l TerminaValue<stning:name<string>companiesfalsefalse205825333040Valuedeal56611829248#) Send + Get a succecsful resnonsela Send + Visualize response*R Send + Write testsGET Read Copy40hobl# Support Daily - in 1h 44 mNo environmentf Save100% L2• Mon 11 May 13:16:014*AIVariables in requestobjectid56611829248C baseUrlhttos:/laoi.hubaoi.comG tokenCKel8LThMxIZOINOMI8kOEwr.DescriotionBulk Edit .A comma separated list of the properties to be returned in the response. If anyA comma separated list of the properties to be returned in the response. If anyA comma separated list of object types to retrieve associated IDs for. If any of tA comma separated list of obiect types to retrieve associated IDs for. It any of tWhether to return oniv results that have been archived.The name of a property whose values are unique for this obiect tvoeDescriptioDescrintionBulk Editi(Required)(Required)Globals Vault Tools?00O...
|
NULL
|
8667179402398565852
|
NULL
|
click
|
ocr
|
NULL
|
rostmanFavouritesjiminny(®) AirDrop• RecentsA Appl rostmanFavouritesjiminny(®) AirDrop• RecentsA Applications9 Documents• Downloadsii lukasIcloud• iCloud Drive992 Svnc toldeLocations0 DXP4800PLUS-B5F A49 Network• CRM• Orange|• Red• Yellow• Greer• Blue• Purple• All lags..caltVIewWindowmelpscreenpipearchive.db• #recycledb.sqlite-shmdb.sqlitevi loassync.log• screenpipe.2026-05-07.0.1ogv data•2026-05-072026-05-062026-04.292026-04-27> 2026-04-25•2026-04-24> 2026-04-22• 2026-04-232026-04-20• 2026.04.212026-04-172026-04-16• 2026-04-15• 2026-04-14screenpipe_sync_updated.sharchive.db-oak>?app• db.sqlite-walscreenpipe_sync.shann cettinas ison• screenpipe.db›_pipes*x Hubspot v• SearchYour team is now on the Free plan with 1 admin. You retain editing access and other members are read-only. View team permissions to see who can edit, or upgrade to restore collaborationCOLLECTIONSy dEt Readse An error occurredee; successtul operation> DEL Archive>PATCH UpdateGET List>POST Createpost Filter. Sort and Search CRM Obiectseg. successful operationge. An error occurred.> CRM Owners• CRM Pinelinec› Deals• Engagements>D OLD ENGAGEMENTSGET list meetingsPOST search modified companiesPOSt soarch tacksGat read calli> poST sparch callGat list callsPOST meptinas scheduledGat aet meetinoPost aet link to tackPost create contact with AssociationHubsnotv Iteration run HSv GET Read Copyce. An error occurred.se successful operationv Iteration run Search HSPOST search contact by email Copy> Journal & webhoooks v4> ©Authl› PropertiesSEARCHpoSt search contact bv nhoneSustem Resource WarningGET next offsetPOST Read a batch of obiecPOST Read a batch of assorGET ReadНІP CRM Objects › crm/v3/objects/{object Type) › {object Id) › ReadKoaseurl)) /crm/vs/odjects/ :objectlype /:objectldE Docs Params • Authorization • Headers 9 Body Scripts Settingswuery ParamspropertiespropertiesassociationspaginateAssociationsarchivedidPropertyPath VariablesobiectlvpePesnonce3 History vSustem resources are constrained. Thesystem may not be able to generate the loadeded for this test and the cest is likely toe Connect Git = Concole 5.l TerminaValue<stning:name<string>companiesfalsefalse205825333040Valuedeal56611829248#) Send + Get a succecsful resnonsela Send + Visualize response*R Send + Write testsGET Read Copy40hobl# Support Daily - in 1h 44 mNo environmentf Save100% L2• Mon 11 May 13:16:014*AIVariables in requestobjectid56611829248C baseUrlhttos:/laoi.hubaoi.comG tokenCKel8LThMxIZOINOMI8kOEwr.DescriotionBulk Edit .A comma separated list of the properties to be returned in the response. If anyA comma separated list of the properties to be returned in the response. If anyA comma separated list of object types to retrieve associated IDs for. If any of tA comma separated list of obiect types to retrieve associated IDs for. It any of tWhether to return oniv results that have been archived.The name of a property whose values are unique for this obiect tvoeDescriptioDescrintionBulk Editi(Required)(Required)Globals Vault Tools?00O...
|
17299
|
NULL
|
NULL
|
NULL
|
|
12824
|
565
|
6
|
2026-05-09T09:36:03.710884+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778319363710_m1.jpg...
|
Firefox
|
Select: payments - db - Adminer — Personal
|
True
|
http://192.168.0.242:8092/?pgsql=db&username=finan
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
DNS / Nameservers | Hostinger
DNS / Nameservers | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Payments Logger
Payments Logger
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
(25) Quora
(25) Quora
Location Logger
Location Logger
Finance Hub
Finance Hub
Finance Hub
Finance Hub
Select: payments - db - Adminer
Select: payments - db - Adminer
Close tab
Електронно банкиране ДСК Директ от Банка ДСК
Електронно банкиране ДСК Директ от Банка ДСК
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
VIVACOM
VIVACOM
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
VIVACOM
VIVACOM
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Claude Code | Claude Platform
Claude Code | Claude Platform
Claude
Claude
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
PostgreSQL
PostgreSQL
»
db
db
»
finance_hub
finance_hub
»
public
public
» Select: payments
Select: payments
Select: payments
Select data
Select data
Show structure
Show structure
Alter table
Alter table
New item
New item
Select
Select
Search
Search
Sort
Sort
Limit
50
Text length
100
Action
Select
SELECT
SELECT
*
FROM
"
payments
payments
"
LIMIT
50
(0.001 s)
Edit
Edit
Modify
Modify
id
id
raw_message
raw_message
date
date
type
type
card
card
recipient
recipient
amount
amount
currency
currency
balance
balance
source
source
status
status
notified_at
notified_at
notify_phone
notify_phone
debit_bgn
debit_bgn
credit_bgn
credit_bgn
transaction_type
transaction_type
payer_account
payer_account
created_at
created_at
updated_at
updated_at
edit
edit
1
DSK Bank. Na 08/05/2026 v 10:00 sa iztegleni 200.00 EUR s karta 400915***4447 ot ATM s adres: DSK AT
…
2026-05-08 07:00:00
ATM
400915***4447
DSK ATM, SOFIA, BG
200
EUR
1050
INGEST
UNPROCESSED
NULL
[PHONE]
NULL
NULL
NULL
NULL
2026-05-09 06:44:52.867
2026-05-09 06:44:52.867
edit
edit
2
DSK Bank. Na 08/05/2026 v 19:32 sa plateni 67.81 EUR s karta 400915***4447 na POS s adres: LIDL BALG
…
2026-05-08 16:32:00
POS
400915***4447
LIDL BALGARIYA EOOD, SOFIYA, BGR
67.81
EUR
2011.57
INGEST
UNPROCESSED
NULL
NULL
NULL
NULL
NULL
NULL
2026-05-09 06:59:18.596
2026-05-09 06:59:18.596
edit
edit
9
Date: 08.05.2026 | Debit: 5.02 EUR
2026-05-08 00:00:00
NULL
400915xxxxxx4447
NULL
5.02
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
5.02
NULL
NULL
NULL
2026-05-09 09:29:57.778
2026-05-09 09:29:57.778
edit
edit
10
Date: 08.05.2026 | Debit: 15.46 EUR
2026-05-08 00:00:00
NULL
400915xxxxxx4447
NULL
15.46
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
15.46
NULL
NULL
NULL
2026-05-09 09:29:57.79
2026-05-09 09:29:57.79
edit
edit
11
Date: 08.05.2026 | Debit: 9.04 EUR
2026-05-08 00:00:00
NULL
400915xxxxxx4447
NULL
9.04
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
9.04
NULL
NULL
NULL
2026-05-09 09:29:57.798
2026-05-09 09:29:57.798
edit
edit
12
Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | Debit:
…
2026-05-08 16:32:00
NULL
400915xxxxxx4447
BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR
67.81
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
67.81
NULL
КАРТОВА ОПЕРАЦИЯ
NULL
2026-05-09 09:29:57.81
2026-05-09 09:29:57.81
edit
edit
13
Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: BGR SOFIA CBA EKO MARKET | Debit: 5.51 EUR
2026-05-07 06:02:00
NULL
400915xxxxxx4447
BGR SOFIA CBA EKO MARKET
5.51
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
5.51
NULL
КАРТОВА ОПЕРАЦИЯ
NULL
2026-05-09 09:29:57.827
2026-05-09 09:29:57.827
edit
edit
14
Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: POL BALICE Lagardere Travel R KR3 | Debit: 5.49 E
…
2026-05-06 10:16:00
NULL
400915xxxxxx4447
POL BALICE Lagardere Travel R KR3
5.49
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
5.49
NULL
КАРТОВА ОПЕРАЦИЯ
NULL
2026-05-09 09:29:57.84
2026-05-09 09:29:57.84
edit
edit
15
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: КОМУНАЛНИ РАЗХОДИ ЕЛ. КАНАЛИ | Debit: 17.93 EUR
2026-05-04 00:00:00
NULL
NULL
КОМУНАЛНИ РАЗХОДИ ЕЛ. КАНАЛИ
17.93
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
17.93
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.861
2026-05-09 09:29:57.861
edit
edit
16
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: С0ФИЙСКА ВОДА ДСК ДИРЕКТ | Debit: 8.44 EUR
2026-05-04 00:00:00
NULL
NULL
С0ФИЙСКА ВОДА ДСК ДИРЕКТ
8.44
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
8.44
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.876
2026-05-09 09:29:57.876
edit
edit
17
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ | Debit:
…
2026-05-04 00:00:00
NULL
NULL
ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ
47.63
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
47.63
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.891
2026-05-09 09:29:57.891
edit
edit
18
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ | Debit:
…
2026-05-04 00:00:00
NULL
NULL
ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ
0.09
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
0.09
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.906
2026-05-09 09:29:57.906
edit
edit
19
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: С0ФИЙСКА ВОДА ДСК ДИРЕКТ | Debit: 29.54 EUR
2026-05-04 00:00:00
NULL
NULL
С0ФИЙСКА ВОДА ДСК ДИРЕКТ
29.54
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
29.54
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.919
2026-05-09 09:29:57.919
edit
edit
20
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ОВЕГАЗ МРЕЖИ АД-ЕЛЕКТРОННИ КАНАЛИ И КАСА | Debit:
…
2026-05-04 00:00:00
NULL
NULL
ОВЕГАЗ МРЕЖИ АД-ЕЛЕКТРОННИ КАНАЛИ И КАСА
14.27
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
14.27
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.934
2026-05-09 09:29:57.934
edit
edit
21
Date: 04.05.2026 | Type: ПРЕВОД SEPA | Payee: ЧЦДГ МИЛА | Debit: 460 EUR
2026-05-04 00:00:00
NULL
NULL
ЧЦДГ МИЛА
460
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
460
NULL
ПРЕВОД SEPA
[IBAN]
2026-05-09 09:29:57.945
2026-05-09 09:29:57.945
edit
edit
22
Date: 30.04.2026 | Debit: 10.22 EUR
2026-04-30 00:00:00
NULL
NULL
NULL
10.22
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
10.22
NULL
NULL
[CREDIT_CARD]
2026-05-09 09:29:57.955
2026-05-09 09:29:57.955
edit
edit
23
Date: 30.04.2026 | Type: ВХОДЯЩ ПАРИЧЕН ПРЕВОД | Payee: ВЕДА ПЕЙРОЛ ООД | Credit: 4325.26 EUR
2026-04-30 00:00:00
NULL
NULL
ВЕДА ПЕЙРОЛ ООД
4325.26
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
NULL
4325.26
ВХОДЯЩ ПАРИЧЕН ПРЕВОД
[IBAN]
2026-05-09 09:29:57.979
2026-05-09 09:29:57.979
edit
edit
24
Date: 22.04.2026 | Type: НЕЗАБАВЕН КРЕДИТЕН ПРЕВОД | Payee: МАРТИНА СВЕТОСЛАВОВА КОВАЛИК | Credit: 1
…
2026-04-22 00:00:00
NULL
NULL
МАРТИНА СВЕТОСЛАВОВА КОВАЛИК
1000
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
NULL
1000
НЕЗАБАВЕН КРЕДИТЕН ПРЕВОД
[IBAN]
2026-05-09 09:29:57.994
2026-05-09 09:29:57.994
Modify
Modify
edit
edit
edit
edit
edit
edit
edit...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DNS / Nameservers | Hostinger","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DNS / Nameservers | Hostinger","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nginx Proxy Manager","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nginx Proxy Manager","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"AFFiNE - All In One KnowledgeOS","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AFFiNE - All In One KnowledgeOS","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All docs · AFFiNE","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All docs · AFFiNE","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Payments Logger","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Payments Logger","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"(25) Quora","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(25) Quora","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Location Logger","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Location Logger","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Finance Hub","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Finance Hub","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Select: payments - db - Adminer","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Select: payments - db - Adminer","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Електронно банкиране ДСК Директ от Банка ДСК","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Електронно банкиране ДСК Директ от Банка ДСК","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"VIVACOM","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"VIVACOM","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Смартфони с Unlimited план до 120 € отстъпка | Vivacom","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Смартфони с Unlimited план до 120 € отстъпка | Vivacom","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"VIVACOM","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"VIVACOM","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code | Claude Platform","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code | Claude Platform","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"PostgreSQL","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"PostgreSQL","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"»","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"db","depth":8,"on_screen":true,"help_text":"Alt+Shift+1","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"db","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"»","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"finance_hub","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"finance_hub","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"»","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"public","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"public","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"» Select: payments","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Select: payments","depth":7,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Select: payments","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Select data","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select data","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Show structure","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show structure","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Alter table","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Alter table","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"New item","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New item","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Select","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Search","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sort","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sort","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Limit","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Text length","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Action","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Select","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"SELECT","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SELECT","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FROM","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"payments","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"payments","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LIMIT","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(0.001 s)","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Edit","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Edit","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Modify","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Modify","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"id","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"id","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"raw_message","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"raw_message","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"date","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"date","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"type","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"type","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"card","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"card","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"recipient","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"recipient","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"amount","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"amount","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"currency","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"currency","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"balance","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"balance","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"source","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"source","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"status","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"status","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"notified_at","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"notified_at","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"notify_phone","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"notify_phone","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"debit_bgn","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"debit_bgn","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"credit_bgn","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"credit_bgn","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"transaction_type","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"transaction_type","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"payer_account","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"payer_account","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"created_at","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"created_at","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"updated_at","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"updated_at","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DSK Bank. Na 08/05/2026 v 10:00 sa iztegleni 200.00 EUR s karta 400915***4447 ot ATM s adres: DSK AT","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"…","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 07:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ATM","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915***4447","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DSK ATM, SOFIA, BG","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1050","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"INGEST","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+359888123456","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 06:44:52.867","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 06:44:52.867","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DSK Bank. Na 08/05/2026 v 19:32 sa plateni 67.81 EUR s karta 400915***4447 na POS s adres: LIDL BALG","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"…","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 16:32:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POS","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915***4447","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LIDL BALGARIYA EOOD, SOFIYA, BGR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"67.81","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2011.57","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"INGEST","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 06:59:18.596","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 06:59:18.596","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 08.05.2026 | Debit: 5.02 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.02","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.02","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.778","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.778","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 08.05.2026 | Debit: 15.46 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15.46","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15.46","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.79","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.79","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 08.05.2026 | Debit: 9.04 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.04","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.04","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.798","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.798","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | Debit:","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"…","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 16:32:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"67.81","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"67.81","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КАРТОВА ОПЕРАЦИЯ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.81","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.81","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: BGR SOFIA CBA EKO MARKET | Debit: 5.51 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 06:02:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BGR SOFIA CBA EKO MARKET","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.51","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.51","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КАРТОВА ОПЕРАЦИЯ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.827","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.827","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: POL BALICE Lagardere Travel R KR3 | Debit: 5.49 E","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"…","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-06 10:16:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POL BALICE Lagardere Travel R KR3","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.49","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.49","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КАРТОВА ОПЕРАЦИЯ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.84","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.84","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: КОМУНАЛНИ РАЗХОДИ ЕЛ. КАНАЛИ | Debit: 17.93 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-04 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КОМУНАЛНИ РАЗХОДИ ЕЛ. КАНАЛИ","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17.93","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17.93","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КОМУНАЛНИ УСЛУГИ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG91STSA93000004594021","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.861","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.861","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: С0ФИЙСКА ВОДА ДСК ДИРЕКТ | Debit: 8.44 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-04 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"С0ФИЙСКА ВОДА ДСК ДИРЕКТ","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8.44","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8.44","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КОМУНАЛНИ УСЛУГИ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG03STSA93000045940400","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.876","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.876","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ | Debit:","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"…","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-04 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"47.63","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"47.63","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КОМУНАЛНИ УСЛУГИ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG15STSA93000004594031","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.891","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.891","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ | Debit:","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"…","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-04 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.09","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.09","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КОМУНАЛНИ УСЛУГИ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG15STSA93000004594031","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.906","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.906","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: С0ФИЙСКА ВОДА ДСК ДИРЕКТ | Debit: 29.54 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-04 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"С0ФИЙСКА ВОДА ДСК ДИРЕКТ","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"29.54","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"29.54","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КОМУНАЛНИ УСЛУГИ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG03STSA93000045940400","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.919","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.919","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ОВЕГАЗ МРЕЖИ АД-ЕЛЕКТРОННИ КАНАЛИ И КАСА | Debit:","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"…","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-04 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ОВЕГАЗ МРЕЖИ АД-ЕЛЕКТРОННИ КАНАЛИ И КАСА","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14.27","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14.27","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КОМУНАЛНИ УСЛУГИ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG57STSA93000004594051","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.934","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.934","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 04.05.2026 | Type: ПРЕВОД SEPA | Payee: ЧЦДГ МИЛА | Debit: 460 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-04 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ЧЦДГ МИЛА","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"460","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"460","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ПРЕВОД SEPA","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG43UBBS81551007780277","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.945","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.945","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 30.04.2026 | Debit: 10.22 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-04-30 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10.22","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10.22","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7291133030269999","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.955","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.955","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 30.04.2026 | Type: ВХОДЯЩ ПАРИЧЕН ПРЕВОД | Payee: ВЕДА ПЕЙРОЛ ООД | Credit: 4325.26 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-04-30 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ВЕДА ПЕЙРОЛ ООД","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4325.26","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4325.26","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ВХОДЯЩ ПАРИЧЕН ПРЕВОД","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG65UNCR70001525823547","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.979","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.979","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"24","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 22.04.2026 | Type: НЕЗАБАВЕН КРЕДИТЕН ПРЕВОД | Payee: МАРТИНА СВЕТОСЛАВОВА КОВАЛИК | Credit: 1","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"…","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-04-22 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"МАРТИНА СВЕТОСЛАВОВА КОВАЛИК","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1000","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1000","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"НЕЗАБАВЕН КРЕДИТЕН ПРЕВОД","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG28UNCR70001522249763","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.994","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.994","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Modify","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Modify","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
8667175267656625072
|
7585659470828877063
|
idle
|
accessibility
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
DNS / Nameservers | Hostinger
DNS / Nameservers | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Payments Logger
Payments Logger
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
(25) Quora
(25) Quora
Location Logger
Location Logger
Finance Hub
Finance Hub
Finance Hub
Finance Hub
Select: payments - db - Adminer
Select: payments - db - Adminer
Close tab
Електронно банкиране ДСК Директ от Банка ДСК
Електронно банкиране ДСК Директ от Банка ДСК
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
VIVACOM
VIVACOM
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
VIVACOM
VIVACOM
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Claude Code | Claude Platform
Claude Code | Claude Platform
Claude
Claude
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
PostgreSQL
PostgreSQL
»
db
db
»
finance_hub
finance_hub
»
public
public
» Select: payments
Select: payments
Select: payments
Select data
Select data
Show structure
Show structure
Alter table
Alter table
New item
New item
Select
Select
Search
Search
Sort
Sort
Limit
50
Text length
100
Action
Select
SELECT
SELECT
*
FROM
"
payments
payments
"
LIMIT
50
(0.001 s)
Edit
Edit
Modify
Modify
id
id
raw_message
raw_message
date
date
type
type
card
card
recipient
recipient
amount
amount
currency
currency
balance
balance
source
source
status
status
notified_at
notified_at
notify_phone
notify_phone
debit_bgn
debit_bgn
credit_bgn
credit_bgn
transaction_type
transaction_type
payer_account
payer_account
created_at
created_at
updated_at
updated_at
edit
edit
1
DSK Bank. Na 08/05/2026 v 10:00 sa iztegleni 200.00 EUR s karta 400915***4447 ot ATM s adres: DSK AT
…
2026-05-08 07:00:00
ATM
400915***4447
DSK ATM, SOFIA, BG
200
EUR
1050
INGEST
UNPROCESSED
NULL
[PHONE]
NULL
NULL
NULL
NULL
2026-05-09 06:44:52.867
2026-05-09 06:44:52.867
edit
edit
2
DSK Bank. Na 08/05/2026 v 19:32 sa plateni 67.81 EUR s karta 400915***4447 na POS s adres: LIDL BALG
…
2026-05-08 16:32:00
POS
400915***4447
LIDL BALGARIYA EOOD, SOFIYA, BGR
67.81
EUR
2011.57
INGEST
UNPROCESSED
NULL
NULL
NULL
NULL
NULL
NULL
2026-05-09 06:59:18.596
2026-05-09 06:59:18.596
edit
edit
9
Date: 08.05.2026 | Debit: 5.02 EUR
2026-05-08 00:00:00
NULL
400915xxxxxx4447
NULL
5.02
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
5.02
NULL
NULL
NULL
2026-05-09 09:29:57.778
2026-05-09 09:29:57.778
edit
edit
10
Date: 08.05.2026 | Debit: 15.46 EUR
2026-05-08 00:00:00
NULL
400915xxxxxx4447
NULL
15.46
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
15.46
NULL
NULL
NULL
2026-05-09 09:29:57.79
2026-05-09 09:29:57.79
edit
edit
11
Date: 08.05.2026 | Debit: 9.04 EUR
2026-05-08 00:00:00
NULL
400915xxxxxx4447
NULL
9.04
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
9.04
NULL
NULL
NULL
2026-05-09 09:29:57.798
2026-05-09 09:29:57.798
edit
edit
12
Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | Debit:
…
2026-05-08 16:32:00
NULL
400915xxxxxx4447
BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR
67.81
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
67.81
NULL
КАРТОВА ОПЕРАЦИЯ
NULL
2026-05-09 09:29:57.81
2026-05-09 09:29:57.81
edit
edit
13
Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: BGR SOFIA CBA EKO MARKET | Debit: 5.51 EUR
2026-05-07 06:02:00
NULL
400915xxxxxx4447
BGR SOFIA CBA EKO MARKET
5.51
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
5.51
NULL
КАРТОВА ОПЕРАЦИЯ
NULL
2026-05-09 09:29:57.827
2026-05-09 09:29:57.827
edit
edit
14
Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: POL BALICE Lagardere Travel R KR3 | Debit: 5.49 E
…
2026-05-06 10:16:00
NULL
400915xxxxxx4447
POL BALICE Lagardere Travel R KR3
5.49
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
5.49
NULL
КАРТОВА ОПЕРАЦИЯ
NULL
2026-05-09 09:29:57.84
2026-05-09 09:29:57.84
edit
edit
15
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: КОМУНАЛНИ РАЗХОДИ ЕЛ. КАНАЛИ | Debit: 17.93 EUR
2026-05-04 00:00:00
NULL
NULL
КОМУНАЛНИ РАЗХОДИ ЕЛ. КАНАЛИ
17.93
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
17.93
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.861
2026-05-09 09:29:57.861
edit
edit
16
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: С0ФИЙСКА ВОДА ДСК ДИРЕКТ | Debit: 8.44 EUR
2026-05-04 00:00:00
NULL
NULL
С0ФИЙСКА ВОДА ДСК ДИРЕКТ
8.44
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
8.44
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.876
2026-05-09 09:29:57.876
edit
edit
17
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ | Debit:
…
2026-05-04 00:00:00
NULL
NULL
ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ
47.63
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
47.63
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.891
2026-05-09 09:29:57.891
edit
edit
18
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ | Debit:
…
2026-05-04 00:00:00
NULL
NULL
ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ
0.09
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
0.09
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.906
2026-05-09 09:29:57.906
edit
edit
19
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: С0ФИЙСКА ВОДА ДСК ДИРЕКТ | Debit: 29.54 EUR
2026-05-04 00:00:00
NULL
NULL
С0ФИЙСКА ВОДА ДСК ДИРЕКТ
29.54
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
29.54
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.919
2026-05-09 09:29:57.919
edit
edit
20
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ОВЕГАЗ МРЕЖИ АД-ЕЛЕКТРОННИ КАНАЛИ И КАСА | Debit:
…
2026-05-04 00:00:00
NULL
NULL
ОВЕГАЗ МРЕЖИ АД-ЕЛЕКТРОННИ КАНАЛИ И КАСА
14.27
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
14.27
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.934
2026-05-09 09:29:57.934
edit
edit
21
Date: 04.05.2026 | Type: ПРЕВОД SEPA | Payee: ЧЦДГ МИЛА | Debit: 460 EUR
2026-05-04 00:00:00
NULL
NULL
ЧЦДГ МИЛА
460
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
460
NULL
ПРЕВОД SEPA
[IBAN]
2026-05-09 09:29:57.945
2026-05-09 09:29:57.945
edit
edit
22
Date: 30.04.2026 | Debit: 10.22 EUR
2026-04-30 00:00:00
NULL
NULL
NULL
10.22
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
10.22
NULL
NULL
[CREDIT_CARD]
2026-05-09 09:29:57.955
2026-05-09 09:29:57.955
edit
edit
23
Date: 30.04.2026 | Type: ВХОДЯЩ ПАРИЧЕН ПРЕВОД | Payee: ВЕДА ПЕЙРОЛ ООД | Credit: 4325.26 EUR
2026-04-30 00:00:00
NULL
NULL
ВЕДА ПЕЙРОЛ ООД
4325.26
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
NULL
4325.26
ВХОДЯЩ ПАРИЧЕН ПРЕВОД
[IBAN]
2026-05-09 09:29:57.979
2026-05-09 09:29:57.979
edit
edit
24
Date: 22.04.2026 | Type: НЕЗАБАВЕН КРЕДИТЕН ПРЕВОД | Payee: МАРТИНА СВЕТОСЛАВОВА КОВАЛИК | Credit: 1
…
2026-04-22 00:00:00
NULL
NULL
МАРТИНА СВЕТОСЛАВОВА КОВАЛИК
1000
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
NULL
1000
НЕЗАБАВЕН КРЕДИТЕН ПРЕВОД
[IBAN]
2026-05-09 09:29:57.994
2026-05-09 09:29:57.994
Modify
Modify
edit
edit
edit
edit
edit
edit
edit...
|
12822
|
NULL
|
NULL
|
NULL
|
|
12826
|
565
|
7
|
2026-05-09T09:36:34.603147+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778319394603_m1.jpg...
|
Firefox
|
Select: payments - db - Adminer — Personal
|
True
|
http://192.168.0.242:8092/?pgsql=db&username=finan
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
DNS / Nameservers | Hostinger
DNS / Nameservers | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Payments Logger
Payments Logger
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
(25) Quora
(25) Quora
Location Logger
Location Logger
Finance Hub
Finance Hub
Finance Hub
Finance Hub
Select: payments - db - Adminer
Select: payments - db - Adminer
Close tab
Електронно банкиране ДСК Директ от Банка ДСК
Електронно банкиране ДСК Директ от Банка ДСК
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
VIVACOM
VIVACOM
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
VIVACOM
VIVACOM
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Claude Code | Claude Platform
Claude Code | Claude Platform
Claude
Claude
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
PostgreSQL
PostgreSQL
»
db
db
»
finance_hub
finance_hub
»
public
public
» Select: payments
Select: payments
Select: payments
Select data
Select data
Show structure
Show structure
Alter table
Alter table
New item
New item
Select
Select
Search
Search
Sort
Sort
Limit
50
Text length
100
Action
Select
SELECT
SELECT
*
FROM
"
payments
payments
"
LIMIT
50
(0.001 s)
Edit
Edit
Modify
Modify
id
id
raw_message
raw_message
date
date
type
type
card
card
recipient
recipient
amount
amount
currency
currency
balance
balance
source
source
status
status
notified_at
notified_at
notify_phone
notify_phone
debit_bgn
debit_bgn
credit_bgn
credit_bgn
transaction_type
transaction_type
payer_account
payer_account
created_at
created_at
updated_at
updated_at
edit
edit
1
DSK Bank. Na 08/05/2026 v 10:00 sa iztegleni 200.00 EUR s karta 400915***4447 ot ATM s adres: DSK AT
…
2026-05-08 07:00:00
ATM
400915***4447
DSK ATM, SOFIA, BG
200
EUR
1050
INGEST
UNPROCESSED
NULL
[PHONE]
NULL
NULL
NULL
NULL
2026-05-09 06:44:52.867
2026-05-09 06:44:52.867
edit
edit
2
DSK Bank. Na 08/05/2026 v 19:32 sa plateni 67.81 EUR s karta 400915***4447 na POS s adres: LIDL BALG
…
2026-05-08 16:32:00
POS
400915***4447
LIDL BALGARIYA EOOD, SOFIYA, BGR
67.81
EUR
2011.57
INGEST
UNPROCESSED
NULL
NULL
NULL
NULL
NULL
NULL
2026-05-09 06:59:18.596
2026-05-09 06:59:18.596
edit
edit
9
Date: 08.05.2026 | Debit: 5.02 EUR
2026-05-08 00:00:00
NULL
400915xxxxxx4447
NULL
5.02
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
5.02
NULL
NULL
NULL
2026-05-09 09:29:57.778
2026-05-09 09:29:57.778
edit
edit
10
Date: 08.05.2026 | Debit: 15.46 EUR
2026-05-08 00:00:00
NULL
400915xxxxxx4447
NULL
15.46
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
15.46
NULL
NULL
NULL
2026-05-09 09:29:57.79
2026-05-09 09:29:57.79
edit
edit
11
Date: 08.05.2026 | Debit: 9.04 EUR
2026-05-08 00:00:00
NULL
400915xxxxxx4447
NULL
9.04
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
9.04
NULL
NULL
NULL
2026-05-09 09:29:57.798
2026-05-09 09:29:57.798
edit
edit
12
Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | Debit:
…
2026-05-08 16:32:00
NULL
400915xxxxxx4447
BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR
67.81
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
67.81
NULL
КАРТОВА ОПЕРАЦИЯ
NULL
2026-05-09 09:29:57.81
2026-05-09 09:29:57.81
edit
edit
13
Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: BGR SOFIA CBA EKO MARKET | Debit: 5.51 EUR
2026-05-07 06:02:00
NULL
400915xxxxxx4447
BGR SOFIA CBA EKO MARKET
5.51
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
5.51
NULL
КАРТОВА ОПЕРАЦИЯ
NULL
2026-05-09 09:29:57.827
2026-05-09 09:29:57.827
edit
edit
14
Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: POL BALICE Lagardere Travel R KR3 | Debit: 5.49 E
…
2026-05-06 10:16:00
NULL
400915xxxxxx4447
POL BALICE Lagardere Travel R KR3
5.49
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
5.49
NULL
КАРТОВА ОПЕРАЦИЯ
NULL
2026-05-09 09:29:57.84
2026-05-09 09:29:57.84
edit
edit
15
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: КОМУНАЛНИ РАЗХОДИ ЕЛ. КАНАЛИ | Debit: 17.93 EUR
2026-05-04 00:00:00
NULL
NULL
КОМУНАЛНИ РАЗХОДИ ЕЛ. КАНАЛИ
17.93
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
17.93
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.861
2026-05-09 09:29:57.861
edit
edit
16
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: С0ФИЙСКА ВОДА ДСК ДИРЕКТ | Debit: 8.44 EUR
2026-05-04 00:00:00
NULL
NULL
С0ФИЙСКА ВОДА ДСК ДИРЕКТ
8.44
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
8.44
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.876
2026-05-09 09:29:57.876
edit
edit
17
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ | Debit:
…
2026-05-04 00:00:00
NULL
NULL
ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ
47.63
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
47.63
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.891
2026-05-09 09:29:57.891
edit
edit
18
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ | Debit:
…
2026-05-04 00:00:00
NULL
NULL
ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ
0.09
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
0.09
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.906
2026-05-09 09:29:57.906
edit
edit
19
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: С0ФИЙСКА ВОДА ДСК ДИРЕКТ | Debit: 29.54 EUR
2026-05-04 00:00:00
NULL
NULL
С0ФИЙСКА ВОДА ДСК ДИРЕКТ
29.54
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
29.54
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.919
2026-05-09 09:29:57.919
edit
edit
20
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ОВЕГАЗ МРЕЖИ АД-ЕЛЕКТРОННИ КАНАЛИ И КАСА | Debit:
…
2026-05-04 00:00:00
NULL
NULL
ОВЕГАЗ МРЕЖИ АД-ЕЛЕКТРОННИ КАНАЛИ И КАСА
14.27
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
14.27
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.934
2026-05-09 09:29:57.934
edit
edit
21
Date: 04.05.2026 | Type: ПРЕВОД SEPA | Payee: ЧЦДГ МИЛА | Debit: 460 EUR
2026-05-04 00:00:00
NULL
NULL
ЧЦДГ МИЛА
460
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
460
NULL
ПРЕВОД SEPA
[IBAN]
2026-05-09 09:29:57.945
2026-05-09 09:29:57.945
edit
edit
22
Date: 30.04.2026 | Debit: 10.22 EUR
2026-04-30 00:00:00
NULL
NULL
NULL
10.22
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
10.22
NULL
NULL
[CREDIT_CARD]
2026-05-09 09:29:57.955
2026-05-09 09:29:57.955
edit
edit
23
Date: 30.04.2026 | Type: ВХОДЯЩ ПАРИЧЕН ПРЕВОД | Payee: ВЕДА ПЕЙРОЛ ООД | Credit: 4325.26 EUR
2026-04-30 00:00:00
NULL
NULL
ВЕДА ПЕЙРОЛ ООД
4325.26
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
NULL
4325.26
ВХОДЯЩ ПАРИЧЕН ПРЕВОД
[IBAN]
2026-05-09 09:29:57.979
2026-05-09 09:29:57.979
edit
edit
24
Date: 22.04.2026 | Type: НЕЗАБАВЕН КРЕДИТЕН ПРЕВОД | Payee: МАРТИНА СВЕТОСЛАВОВА КОВАЛИК | Credit: 1
…
2026-04-22 00:00:00
NULL
NULL
МАРТИНА СВЕТОСЛАВОВА КОВАЛИК
1000
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
NULL
1000
НЕЗАБАВЕН КРЕДИТЕН ПРЕВОД
[IBAN]
2026-05-09 09:29:57.994
2026-05-09 09:29:57.994
Modify
Modify
edit
edit
edit
edit
edit
edit
edit...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DNS / Nameservers | Hostinger","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DNS / Nameservers | Hostinger","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nginx Proxy Manager","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nginx Proxy Manager","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"AFFiNE - All In One KnowledgeOS","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AFFiNE - All In One KnowledgeOS","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All docs · AFFiNE","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All docs · AFFiNE","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Payments Logger","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Payments Logger","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"(25) Quora","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(25) Quora","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Location Logger","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Location Logger","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Finance Hub","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Finance Hub","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Select: payments - db - Adminer","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Select: payments - db - Adminer","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Електронно банкиране ДСК Директ от Банка ДСК","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Електронно банкиране ДСК Директ от Банка ДСК","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"VIVACOM","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"VIVACOM","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Смартфони с Unlimited план до 120 € отстъпка | Vivacom","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Смартфони с Unlimited план до 120 € отстъпка | Vivacom","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"VIVACOM","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"VIVACOM","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code | Claude Platform","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code | Claude Platform","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"PostgreSQL","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"PostgreSQL","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"»","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"db","depth":8,"on_screen":true,"help_text":"Alt+Shift+1","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"db","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"»","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"finance_hub","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"finance_hub","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"»","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"public","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"public","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"» Select: payments","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Select: payments","depth":7,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Select: payments","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Select data","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select data","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Show structure","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show structure","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Alter table","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Alter table","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"New item","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New item","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Select","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Search","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sort","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sort","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Limit","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Text length","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Action","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Select","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"SELECT","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SELECT","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FROM","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"payments","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"payments","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LIMIT","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(0.001 s)","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Edit","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Edit","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Modify","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Modify","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"id","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"id","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"raw_message","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"raw_message","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"date","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"date","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"type","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"type","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"card","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"card","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"recipient","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"recipient","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"amount","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"amount","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"currency","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"currency","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"balance","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"balance","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"source","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"source","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"status","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"status","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"notified_at","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"notified_at","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"notify_phone","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"notify_phone","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"debit_bgn","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"debit_bgn","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"credit_bgn","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"credit_bgn","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"transaction_type","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"transaction_type","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"payer_account","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"payer_account","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"created_at","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"created_at","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"updated_at","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"updated_at","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DSK Bank. Na 08/05/2026 v 10:00 sa iztegleni 200.00 EUR s karta 400915***4447 ot ATM s adres: DSK AT","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"…","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 07:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ATM","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915***4447","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DSK ATM, SOFIA, BG","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1050","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"INGEST","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+359888123456","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 06:44:52.867","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 06:44:52.867","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DSK Bank. Na 08/05/2026 v 19:32 sa plateni 67.81 EUR s karta 400915***4447 na POS s adres: LIDL BALG","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"…","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 16:32:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POS","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915***4447","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LIDL BALGARIYA EOOD, SOFIYA, BGR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"67.81","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2011.57","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"INGEST","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 06:59:18.596","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 06:59:18.596","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 08.05.2026 | Debit: 5.02 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.02","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.02","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.778","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.778","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 08.05.2026 | Debit: 15.46 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15.46","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15.46","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.79","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.79","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 08.05.2026 | Debit: 9.04 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.04","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.04","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.798","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.798","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | Debit:","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"…","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-08 16:32:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"67.81","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"67.81","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КАРТОВА ОПЕРАЦИЯ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.81","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.81","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: BGR SOFIA CBA EKO MARKET | Debit: 5.51 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-07 06:02:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BGR SOFIA CBA EKO MARKET","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.51","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.51","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КАРТОВА ОПЕРАЦИЯ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.827","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.827","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: POL BALICE Lagardere Travel R KR3 | Debit: 5.49 E","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"…","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-06 10:16:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POL BALICE Lagardere Travel R KR3","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.49","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.49","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КАРТОВА ОПЕРАЦИЯ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.84","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.84","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: КОМУНАЛНИ РАЗХОДИ ЕЛ. КАНАЛИ | Debit: 17.93 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-04 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КОМУНАЛНИ РАЗХОДИ ЕЛ. КАНАЛИ","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17.93","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17.93","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КОМУНАЛНИ УСЛУГИ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG91STSA93000004594021","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.861","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.861","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: С0ФИЙСКА ВОДА ДСК ДИРЕКТ | Debit: 8.44 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-04 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"С0ФИЙСКА ВОДА ДСК ДИРЕКТ","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8.44","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8.44","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КОМУНАЛНИ УСЛУГИ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG03STSA93000045940400","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.876","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.876","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ | Debit:","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"…","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-04 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"47.63","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"47.63","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КОМУНАЛНИ УСЛУГИ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG15STSA93000004594031","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.891","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.891","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ | Debit:","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"…","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-04 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.09","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.09","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КОМУНАЛНИ УСЛУГИ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG15STSA93000004594031","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.906","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.906","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: С0ФИЙСКА ВОДА ДСК ДИРЕКТ | Debit: 29.54 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-04 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"С0ФИЙСКА ВОДА ДСК ДИРЕКТ","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"29.54","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"29.54","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КОМУНАЛНИ УСЛУГИ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG03STSA93000045940400","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.919","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.919","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ОВЕГАЗ МРЕЖИ АД-ЕЛЕКТРОННИ КАНАЛИ И КАСА | Debit:","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"…","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-04 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ОВЕГАЗ МРЕЖИ АД-ЕЛЕКТРОННИ КАНАЛИ И КАСА","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14.27","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14.27","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КОМУНАЛНИ УСЛУГИ","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG57STSA93000004594051","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.934","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.934","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 04.05.2026 | Type: ПРЕВОД SEPA | Payee: ЧЦДГ МИЛА | Debit: 460 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-04 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ЧЦДГ МИЛА","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"460","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"460","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ПРЕВОД SEPA","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG43UBBS81551007780277","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.945","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.945","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 30.04.2026 | Debit: 10.22 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-04-30 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10.22","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10.22","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7291133030269999","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.955","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.955","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 30.04.2026 | Type: ВХОДЯЩ ПАРИЧЕН ПРЕВОД | Payee: ВЕДА ПЕЙРОЛ ООД | Credit: 4325.26 EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-04-30 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ВЕДА ПЕЙРОЛ ООД","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4325.26","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4325.26","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ВХОДЯЩ ПАРИЧЕН ПРЕВОД","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG65UNCR70001525823547","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.979","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.979","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"24","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date: 22.04.2026 | Type: НЕЗАБАВЕН КРЕДИТЕН ПРЕВОД | Payee: МАРТИНА СВЕТОСЛАВОВА КОВАЛИК | Credit: 1","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"…","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-04-22 00:00:00","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"МАРТИНА СВЕТОСЛАВОВА КОВАЛИК","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1000","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EUR","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UPLOAD","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UNPROCESSED","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1000","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"НЕЗАБАВЕН КРЕДИТЕН ПРЕВОД","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BG28UNCR70001522249763","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.994","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-09 09:29:57.994","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Modify","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Modify","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"edit","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"edit","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
8667175267656625072
|
7585659470828877063
|
idle
|
accessibility
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
DNS / Nameservers | Hostinger
DNS / Nameservers | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Payments Logger
Payments Logger
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
(25) Quora
(25) Quora
Location Logger
Location Logger
Finance Hub
Finance Hub
Finance Hub
Finance Hub
Select: payments - db - Adminer
Select: payments - db - Adminer
Close tab
Електронно банкиране ДСК Директ от Банка ДСК
Електронно банкиране ДСК Директ от Банка ДСК
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
Stop Losing Notes: Pick A Cross-Device App That Syncs | AFFiNE
VIVACOM
VIVACOM
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
Смартфони с Unlimited план до 120 € отстъпка | Vivacom
VIVACOM
VIVACOM
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Смартфон SAMSUNG GALAXY A57 5G 256GB | Vivacom
Claude Code | Claude Platform
Claude Code | Claude Platform
Claude
Claude
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
PostgreSQL
PostgreSQL
»
db
db
»
finance_hub
finance_hub
»
public
public
» Select: payments
Select: payments
Select: payments
Select data
Select data
Show structure
Show structure
Alter table
Alter table
New item
New item
Select
Select
Search
Search
Sort
Sort
Limit
50
Text length
100
Action
Select
SELECT
SELECT
*
FROM
"
payments
payments
"
LIMIT
50
(0.001 s)
Edit
Edit
Modify
Modify
id
id
raw_message
raw_message
date
date
type
type
card
card
recipient
recipient
amount
amount
currency
currency
balance
balance
source
source
status
status
notified_at
notified_at
notify_phone
notify_phone
debit_bgn
debit_bgn
credit_bgn
credit_bgn
transaction_type
transaction_type
payer_account
payer_account
created_at
created_at
updated_at
updated_at
edit
edit
1
DSK Bank. Na 08/05/2026 v 10:00 sa iztegleni 200.00 EUR s karta 400915***4447 ot ATM s adres: DSK AT
…
2026-05-08 07:00:00
ATM
400915***4447
DSK ATM, SOFIA, BG
200
EUR
1050
INGEST
UNPROCESSED
NULL
[PHONE]
NULL
NULL
NULL
NULL
2026-05-09 06:44:52.867
2026-05-09 06:44:52.867
edit
edit
2
DSK Bank. Na 08/05/2026 v 19:32 sa plateni 67.81 EUR s karta 400915***4447 na POS s adres: LIDL BALG
…
2026-05-08 16:32:00
POS
400915***4447
LIDL BALGARIYA EOOD, SOFIYA, BGR
67.81
EUR
2011.57
INGEST
UNPROCESSED
NULL
NULL
NULL
NULL
NULL
NULL
2026-05-09 06:59:18.596
2026-05-09 06:59:18.596
edit
edit
9
Date: 08.05.2026 | Debit: 5.02 EUR
2026-05-08 00:00:00
NULL
400915xxxxxx4447
NULL
5.02
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
5.02
NULL
NULL
NULL
2026-05-09 09:29:57.778
2026-05-09 09:29:57.778
edit
edit
10
Date: 08.05.2026 | Debit: 15.46 EUR
2026-05-08 00:00:00
NULL
400915xxxxxx4447
NULL
15.46
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
15.46
NULL
NULL
NULL
2026-05-09 09:29:57.79
2026-05-09 09:29:57.79
edit
edit
11
Date: 08.05.2026 | Debit: 9.04 EUR
2026-05-08 00:00:00
NULL
400915xxxxxx4447
NULL
9.04
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
9.04
NULL
NULL
NULL
2026-05-09 09:29:57.798
2026-05-09 09:29:57.798
edit
edit
12
Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | Debit:
…
2026-05-08 16:32:00
NULL
400915xxxxxx4447
BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR
67.81
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
67.81
NULL
КАРТОВА ОПЕРАЦИЯ
NULL
2026-05-09 09:29:57.81
2026-05-09 09:29:57.81
edit
edit
13
Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: BGR SOFIA CBA EKO MARKET | Debit: 5.51 EUR
2026-05-07 06:02:00
NULL
400915xxxxxx4447
BGR SOFIA CBA EKO MARKET
5.51
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
5.51
NULL
КАРТОВА ОПЕРАЦИЯ
NULL
2026-05-09 09:29:57.827
2026-05-09 09:29:57.827
edit
edit
14
Date: 08.05.2026 | Type: КАРТОВА ОПЕРАЦИЯ | Payee: POL BALICE Lagardere Travel R KR3 | Debit: 5.49 E
…
2026-05-06 10:16:00
NULL
400915xxxxxx4447
POL BALICE Lagardere Travel R KR3
5.49
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
5.49
NULL
КАРТОВА ОПЕРАЦИЯ
NULL
2026-05-09 09:29:57.84
2026-05-09 09:29:57.84
edit
edit
15
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: КОМУНАЛНИ РАЗХОДИ ЕЛ. КАНАЛИ | Debit: 17.93 EUR
2026-05-04 00:00:00
NULL
NULL
КОМУНАЛНИ РАЗХОДИ ЕЛ. КАНАЛИ
17.93
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
17.93
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.861
2026-05-09 09:29:57.861
edit
edit
16
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: С0ФИЙСКА ВОДА ДСК ДИРЕКТ | Debit: 8.44 EUR
2026-05-04 00:00:00
NULL
NULL
С0ФИЙСКА ВОДА ДСК ДИРЕКТ
8.44
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
8.44
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.876
2026-05-09 09:29:57.876
edit
edit
17
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ | Debit:
…
2026-05-04 00:00:00
NULL
NULL
ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ
47.63
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
47.63
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.891
2026-05-09 09:29:57.891
edit
edit
18
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ | Debit:
…
2026-05-04 00:00:00
NULL
NULL
ЕЛЕКТPОХОЛДПPОДАЖБИ/ДСКДИРЕКТ/ЕЛ.ЕНЕРГИЯ
0.09
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
0.09
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.906
2026-05-09 09:29:57.906
edit
edit
19
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: С0ФИЙСКА ВОДА ДСК ДИРЕКТ | Debit: 29.54 EUR
2026-05-04 00:00:00
NULL
NULL
С0ФИЙСКА ВОДА ДСК ДИРЕКТ
29.54
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
29.54
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.919
2026-05-09 09:29:57.919
edit
edit
20
Date: 04.05.2026 | Type: КОМУНАЛНИ УСЛУГИ | Payee: ОВЕГАЗ МРЕЖИ АД-ЕЛЕКТРОННИ КАНАЛИ И КАСА | Debit:
…
2026-05-04 00:00:00
NULL
NULL
ОВЕГАЗ МРЕЖИ АД-ЕЛЕКТРОННИ КАНАЛИ И КАСА
14.27
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
14.27
NULL
КОМУНАЛНИ УСЛУГИ
[IBAN]
2026-05-09 09:29:57.934
2026-05-09 09:29:57.934
edit
edit
21
Date: 04.05.2026 | Type: ПРЕВОД SEPA | Payee: ЧЦДГ МИЛА | Debit: 460 EUR
2026-05-04 00:00:00
NULL
NULL
ЧЦДГ МИЛА
460
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
460
NULL
ПРЕВОД SEPA
[IBAN]
2026-05-09 09:29:57.945
2026-05-09 09:29:57.945
edit
edit
22
Date: 30.04.2026 | Debit: 10.22 EUR
2026-04-30 00:00:00
NULL
NULL
NULL
10.22
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
10.22
NULL
NULL
[CREDIT_CARD]
2026-05-09 09:29:57.955
2026-05-09 09:29:57.955
edit
edit
23
Date: 30.04.2026 | Type: ВХОДЯЩ ПАРИЧЕН ПРЕВОД | Payee: ВЕДА ПЕЙРОЛ ООД | Credit: 4325.26 EUR
2026-04-30 00:00:00
NULL
NULL
ВЕДА ПЕЙРОЛ ООД
4325.26
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
NULL
4325.26
ВХОДЯЩ ПАРИЧЕН ПРЕВОД
[IBAN]
2026-05-09 09:29:57.979
2026-05-09 09:29:57.979
edit
edit
24
Date: 22.04.2026 | Type: НЕЗАБАВЕН КРЕДИТЕН ПРЕВОД | Payee: МАРТИНА СВЕТОСЛАВОВА КОВАЛИК | Credit: 1
…
2026-04-22 00:00:00
NULL
NULL
МАРТИНА СВЕТОСЛАВОВА КОВАЛИК
1000
EUR
NULL
UPLOAD
UNPROCESSED
NULL
NULL
NULL
1000
НЕЗАБАВЕН КРЕДИТЕН ПРЕВОД
[IBAN]
2026-05-09 09:29:57.994
2026-05-09 09:29:57.994
Modify
Modify
edit
edit
edit
edit
edit
edit
edit...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
27185
|
NULL
|
0
|
2026-05-12T14:06:51.886900+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778594811886_m1.jpg...
|
Firefox
|
[JY-20773] User Pilot not receiving events on repo [JY-20773] User Pilot not receiving events on report generated - Jira — Work...
|
True
|
jiminny.atlassian.net/browse/JY-20773
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp• 0(all→meet.google.com/bdj-nvho-bms?authuser=lukas.kovalik%40jiminny.comStefka Stoyanova (Presenting, annotating)Retro - Platform • nowStefka StoyanovaSpacesPlatfoĐ Sum• SeaREADY FSteliyan GeorgievNikolay IvanovNikolay YankovJIMINNYQ Search• JY-20739 / @ JY-20625[POC]Jiminny MCP Connector+• DescriptionCustomers are starting to use AI tool (like Claude and GPT) to connect the information from all f their platforminto one place. Which they then use to interrogate and perform different analysis on their data. We want tocreate a Jiminny MCP which will enable them to connect their Jiminny data to Claude/GPT.• create a POC to demonstrate the approach• determine form where the data needs to be fetched - long term we want to fetch everything from ElasticSearch but in order to release it faster we can consider a temporary mixed approach with the DB• we will use php/laravel for the implementation• determine what the authentication needs to be (keep in mind requirement 1 and 7)|• outline any issues/blockers that we need to address• the approach/findings should be confirmed with Stefka and Galya• product requirements - Jiminny MCP ConnectorNikolay Nikolov+ CreateAneliya Angelova• UpgradeAsk RovoIn ProgressvBACKLOGBLOCKEDDONEDULICATEWON'T DOView workflowExplain workflowComponents45:06 PM | Retro - Platform* Improve Spikeikolay Nikolov1 to mealya Dimitrovaen with VS Codeate branchommits2 pull requests2 buildsPlatform• 6:2323 hours agoOPENDeployed8•Tue 12 May 17:06:51=8Lukas Kovalik...
|
NULL
|
8665925093678030940
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp• 0(all→meet.google.com/bdj-nvho-bms?authuser=lukas.kovalik%40jiminny.comStefka Stoyanova (Presenting, annotating)Retro - Platform • nowStefka StoyanovaSpacesPlatfoĐ Sum• SeaREADY FSteliyan GeorgievNikolay IvanovNikolay YankovJIMINNYQ Search• JY-20739 / @ JY-20625[POC]Jiminny MCP Connector+• DescriptionCustomers are starting to use AI tool (like Claude and GPT) to connect the information from all f their platforminto one place. Which they then use to interrogate and perform different analysis on their data. We want tocreate a Jiminny MCP which will enable them to connect their Jiminny data to Claude/GPT.• create a POC to demonstrate the approach• determine form where the data needs to be fetched - long term we want to fetch everything from ElasticSearch but in order to release it faster we can consider a temporary mixed approach with the DB• we will use php/laravel for the implementation• determine what the authentication needs to be (keep in mind requirement 1 and 7)|• outline any issues/blockers that we need to address• the approach/findings should be confirmed with Stefka and Galya• product requirements - Jiminny MCP ConnectorNikolay Nikolov+ CreateAneliya Angelova• UpgradeAsk RovoIn ProgressvBACKLOGBLOCKEDDONEDULICATEWON'T DOView workflowExplain workflowComponents45:06 PM | Retro - Platform* Improve Spikeikolay Nikolov1 to mealya Dimitrovaen with VS Codeate branchommits2 pull requests2 buildsPlatform• 6:2323 hours agoOPENDeployed8•Tue 12 May 17:06:51=8Lukas Kovalik...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18221
|
791
|
15
|
2026-05-11T11:05:09.943296+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497509943_m2.jpg...
|
Slack
|
Toast (DM) - Jiminny Inc - 2 new items - Slack
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Aneliya Angelova
Galya Dimitrova
Petko Kashinski
Stefka Stoyanova
Vasil Vasilev
Nikolay Ivanov
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Stoyan Tanev
Ves
Lukas Kovalik
you
Jira Cloud
Toast
Google Calendar
Home
Messages
Messages
About
Jump to date
Review Toast
APP
May 8th at 2:52:32 PM
2:52 PM
#12059 Jy 20820 es reindex stream model hydration
(edited)
PR review requested by
@Vasil Vasilev
@Vasil Vasilev
#12059 Jy 20820 es reindex stream model hydration
#12059 Jy 20820 es reindex stream model hydration
by
@Vasil Vasilev
@Vasil Vasilev
32 commits・12 files changed
JIRA:
JY-20820
JY-20820
Changes:
• Load documents for reindexing by streaming raw data into a single model, that is hydrated, extracts indexing data, and is then destroyed. Previously a
…
Show more
jiminny/app
jiminny/app
Added by
Toast for GitHub
Toast for GitHub
approved by
yalokin-jiminny
yalokin-jiminny
Added by
Toast for GitHub
Toast for GitHub
Jump to date
New
Toast
APP
Today at 10:00:02 AM
10:00 AM
Review
app
#12059 Jy 20820 es reindex stream model hydration
#12059 Jy 20820 es reindex stream model hydration
2 days old・12 files changed・
@Vasil Vasilev
@Vasil Vasilev
Added by
Toast for GitHub
Toast for GitHub
Resolve Conflicts
app
#11443 Test hublets latency
#11443 Test hublets latency
5 months old・20 files changed
#11327 JY-19501 webhook based opportunity sync
#11327 JY-19501 webhook based opportunity sync
Show more
Added by
Toast for GitHub
Toast for GitHub
Needs Love
app
#12024 JY-20773 fix user pilot tracking ofr automated report generated
#12024 JY-20773 fix user pilot tracking ofr automated report generated
12 days old・1 file changed
Added by
Toast for GitHub
Toast for GitHub
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Review Toast
APP
Today at 10:29:48 AM...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.5152925,"top":1.0,"width":0.011968086,"height":-0.058260202},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018949468,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.01761968,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.02925532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":21,"bounds":{"left":0.5980718,"top":1.0,"width":0.0026595744,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"bounds":{"left":0.5465425,"top":1.0,"width":0.024268618,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.043882977,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.04454787,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.022273935,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.012300532,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.018284574,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.010638298,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"bounds":{"left":0.5518617,"top":1.0,"width":0.034574468,"height":-0.09177971},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Petko Kashinski","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Ves","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Google Calendar","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Home","depth":17,"bounds":{"left":0.6143617,"top":1.0,"width":0.011968086,"height":-0.092577815},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Messages","depth":17,"bounds":{"left":0.6353058,"top":1.0,"width":0.018949468,"height":-0.092577815},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"About","depth":17,"bounds":{"left":0.66356385,"top":1.0,"width":0.011968086,"height":-0.092577815},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Jump to date","depth":23,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Review Toast","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"APP","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"May 8th at 2:52:32 PM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:52 PM","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#12059 Jy 20820 es reindex stream model hydration","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"(edited)","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"PR review requested by","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"@Vasil Vasilev","depth":27,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"@Vasil Vasilev","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"#12059 Jy 20820 es reindex stream model hydration","depth":27,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#12059 Jy 20820 es reindex stream model hydration","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"by","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"@Vasil Vasilev","depth":27,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"@Vasil Vasilev","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"32 commits・12 files changed","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"JIRA:","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"JY-20820","depth":27,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"JY-20820","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Changes:","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"• Load documents for reindexing by streaming raw data into a single model, that is hydrated, extracts indexing data, and is then destroyed. Previously a","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"…","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Show more","depth":26,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"jiminny/app","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"jiminny/app","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Added by","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Toast for GitHub","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Toast for GitHub","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"approved by","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"yalokin-jiminny","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"yalokin-jiminny","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Added by","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Toast for GitHub","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Toast for GitHub","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":23,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"New","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Toast","depth":24,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"APP","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 10:00:02 AM","depth":24,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:00 AM","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Review","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"#12059 Jy 20820 es reindex stream model hydration","depth":27,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#12059 Jy 20820 es reindex stream model hydration","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2 days old・12 files changed・","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"@Vasil Vasilev","depth":27,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"@Vasil Vasilev","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Added by","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Toast for GitHub","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Toast for GitHub","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Resolve Conflicts","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"#11443 Test hublets latency","depth":27,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#11443 Test hublets latency","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"5 months old・20 files changed","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"#11327 JY-19501 webhook based opportunity sync","depth":27,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#11327 JY-19501 webhook based opportunity sync","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Show more","depth":26,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Added by","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Toast for GitHub","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Toast for GitHub","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Needs Love","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"#12024 JY-20773 fix user pilot tracking ofr automated report generated","depth":27,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#12024 JY-20773 fix user pilot tracking ofr automated report generated","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"12 days old・1 file changed","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Added by","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Toast for GitHub","depth":26,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Toast for GitHub","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":26,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"on_screen":true,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":26,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Review Toast","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"APP","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Today at 10:29:48 AM","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8665439839841135559
|
-3599245861287445054
|
visual_change
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
curiosity_lab
engineering
general
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Aneliya Angelova
Galya Dimitrova
Petko Kashinski
Stefka Stoyanova
Vasil Vasilev
Nikolay Ivanov
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Stoyan Tanev
Ves
Lukas Kovalik
you
Jira Cloud
Toast
Google Calendar
Home
Messages
Messages
About
Jump to date
Review Toast
APP
May 8th at 2:52:32 PM
2:52 PM
#12059 Jy 20820 es reindex stream model hydration
(edited)
PR review requested by
@Vasil Vasilev
@Vasil Vasilev
#12059 Jy 20820 es reindex stream model hydration
#12059 Jy 20820 es reindex stream model hydration
by
@Vasil Vasilev
@Vasil Vasilev
32 commits・12 files changed
JIRA:
JY-20820
JY-20820
Changes:
• Load documents for reindexing by streaming raw data into a single model, that is hydrated, extracts indexing data, and is then destroyed. Previously a
…
Show more
jiminny/app
jiminny/app
Added by
Toast for GitHub
Toast for GitHub
approved by
yalokin-jiminny
yalokin-jiminny
Added by
Toast for GitHub
Toast for GitHub
Jump to date
New
Toast
APP
Today at 10:00:02 AM
10:00 AM
Review
app
#12059 Jy 20820 es reindex stream model hydration
#12059 Jy 20820 es reindex stream model hydration
2 days old・12 files changed・
@Vasil Vasilev
@Vasil Vasilev
Added by
Toast for GitHub
Toast for GitHub
Resolve Conflicts
app
#11443 Test hublets latency
#11443 Test hublets latency
5 months old・20 files changed
#11327 JY-19501 webhook based opportunity sync
#11327 JY-19501 webhook based opportunity sync
Show more
Added by
Toast for GitHub
Toast for GitHub
Needs Love
app
#12024 JY-20773 fix user pilot tracking ofr automated report generated
#12024 JY-20773 fix user pilot tracking ofr automated report generated
12 days old・1 file changed
Added by
Toast for GitHub
Toast for GitHub
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Review Toast
APP
Today at 10:29:48 AM
codeFV faVsco.js°9 JY-20725-handle-HS-search-rate-limitroledey© UserAutomatedReportsController.php© PlaybackController.php(C) TranscodeParameterResdC) Hubspot/Service.onpC) UserService.pnp(c) Uuid.pnp> D TraitsD UseCases> D User> D Utils› D Validation> OvOphp nelpers.ong© InitialFrontendState.php© Jiminny.phpc) Plan.oho© Serializer.phpC) TeamScimDetails.ohpbootstrap>C build> contia>D contrib→ database>docstront-end> D lang> node_modules library rootM ohostan> M nublic>O resourcesv Mroutesphp api.phppnp api_vz.ongpnp console.onopnp customer_api.onppnp embedded.ongphp nealtn.onppnp scim.onophp uprotectedweb.phpphp web.phpphp webhook.php>O scriptsv O storage•aoo> M debuabar.… M frameworkv Mloas.aitianoreê audio. wav= custom.loalOhuospotserwice.pnpT SyncCrmEntitiesTrait.php© CachedCrmServiceDecorator.php© JiminnyDebugCommand.phpRematchActivityOnCrmObjectDetach.php) MatchactivityermData.pnp© Job.php© CrmActivityService.phpRateLimitException.phcC) CrmobiectsResolver.phg() ProviderRateLimiter.phpclass Cuient extends BasecLient imolements HubspotcuientinterfaceM A2 A67 X3Л Yprivate function createBatchConfiguration(string Sobjecttype): array352= hubspot-journal-poll.log= laravel log< nhnunit ymus tht is= oauth-nrivate kevTacts naccod. 12 (todav 12:02'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublic0bjectId::class.'api' => Sthis->getNewInstance@->crmO->contacts@->batchApiO.1t @ 1ssetSconfiqurationsSobnecttvoelo) <Inval1dArqumentExcentzon message: "Unsupported obnect tyne: Sobnectivoe-"):return SconfiaurationsiSobiecttvoel:private function prepareBatchRequest(array $batchConfig, array $crmids, array $fields): object$batchReadRequest = $batchConfig['batchReadRequest'];SinputClass = $batchConfig['inputClass'];Sinputs = array_map(function (ScrmId) use (SinputClass) <Sinput = new $inputClassO:Sinnut->cottd(ScomTd)•return $input;}. ScrmIds):SbatchreadRequest->setinputss1nputs)sSbatchReadReguest->setProperties(Sfields):orivate function validateAoiResponse(Sresponse, strina Sobiectivoe): voidif @ Sresponse)4throw new CrmException( message: "HubSpot API returned null response for {SobiectTvnel batch read")•nnivate function nrocecsAniResults(Snesnanse)• arnav=custom.logA console (EU]= laravel.log X 4 SF jiminny@localhost]4 HS_local [jiminny@localhost]console [PKol)A console [STAGING]429x5 Ccw.*uresultsT.Y:WI2MY• мon 11 May 14:00.09HandleHubspotRateLimitTest vCascadeHubspot Rate Limit Re+0 ..lets simplify it, just call it parseMessage and skip policy al togetherThought for 5s ›Read Client.php #L86-200b Client.php+17 -35Verity nothing broke:Command docker. tail• tests/uni/365/486 cha re tan asu sportatci Mitest, phetests/Unit/Services/Crm/Hubspot/ClientTest.php --no-coverage 2>&1 | tail -10Contideration: Phome.3.minnw/ohounit.xml•[PASSWORD_DOTS]DD..DD..D.D..DDDDD.DDD...D......65 / 80 (808)Time: 02:14.415. Memorv: 62.00 MBOK hut there were ¿csuec!All 80 tests still passSummaryRemoved narsePo Eicv entirelv. narseRetrvAfter now mans messade kevwords direct v to seconds without theintermediate policy conceptBefore: header • narsePolicv » nolicy constant - seconds After» header » narseMeçsade → secondsChanges:• parsePolicy → deleted• narseMessade added: returns the raw messade strina from the response bodv (or .• )•parseRetryAfter does the keyword matching itself (daily → 600, ten secondly → 10, secondly → 1)• Log line in executeRequest now logs message instead of policy - more informative for debuggingThe keyword-match order is the same as before (daily before ten secondly before secondly ) to avoid substringcollision..nl .Ask anvthina (84L)" CodeClaude Onus 1.7 MediumWN Windsurf Toams 2-1UTF.8io 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
25939
|
1083
|
9
|
2026-05-12T11:55:43.753008+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778586943753_m2.jpg...
|
Firefox
|
TypeError: League\Flysystem\Filesystem::has(): Arg TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app — Work...
|
True
|
jiminny.sentry.io/issues/6873095751/events/?enviro jiminny.sentry.io/issues/6873095751/events/?environment=production-eu&environment=production&project=82419&query=&statsPeriod=24h...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Unnamed Group
TypeError: League\Flysystem\Filesyst Unnamed Group
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
Close tab
CloudWatch | us-east-2
CloudWatch | us-east-2
test (885333) - jiminny/app
test (885333) - jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking for automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking for automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
Platform Team - Backlog - Jira
Platform Team - Backlog - Jira
Userpilot | Events
Userpilot | Events
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to main content
Skip to main content
Toggle organization menu
Issues
Issues
Explore
Explore
Dashboards
Dashboards
Monitors
Monitors
Settings
Settings
Try Business
What's New
Help
[EMAIL]
Issues
Expand
Feed
Feed
Errors & Outages
Errors & Outages
Breached Metrics
Breached Metrics
Warnings
Warnings
User Feedback
User Feedback
Autofix
Autofix
Recently Run
Recently Run
All Views
All Views
Configure
Alerts Moved
Alerts
Moved
Issues
Issues
View Project Details
APP-1DTF
Ask Seer
Ask Seer
/
Give Feedback
TypeError
View events
Events (total)
Users (90d)
Level: Error
League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218
2.4K
0
Ongoing
/app/Jobs/AutomatedReports/SendReportJob.php in Jiminny\Jobs\AutomatedReports\SendReportJob::handle
Quick Fix
Resolve
Resolve
More resolve options
Archive
Archive
Archive options
Subscribe
Share
More Actions
Priority
Modify issue priority
High
Assignee
Modify issue assignee
Nikolay Nikolov
production-eu, production
production-eu, production
24H
24H...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Unnamed Group","depth":4,"bounds":{"left":0.0028257978,"top":0.057063047,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":4,"bounds":{"left":0.0028257978,"top":0.08060654,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":5,"bounds":{"left":0.015957447,"top":0.09217877,"width":0.40492022,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.087789305,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0028257978,"top":0.11332801,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.015957447,"top":0.12490024,"width":0.04138963,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"test (885333) - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.14604948,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"test (885333) - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.15762171,"width":0.048038565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":4,"bounds":{"left":0.0,"top":0.17877094,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.19034317,"width":0.16140293,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.21149242,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.22306465,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":4,"bounds":{"left":0.0,"top":0.2442139,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.25578612,"width":0.1200133,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20773 fix user pilot tracking for automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.27693537,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking for automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.28850758,"width":0.1931516,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20776] Automated report - sentry - Jira","depth":4,"bounds":{"left":0.0,"top":0.30965683,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20776] Automated report - sentry - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.32122904,"width":0.07646277,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.3423783,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.35395053,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":4,"bounds":{"left":0.0,"top":0.37509975,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.386672,"width":0.09524601,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Platform Team - Backlog - Jira","depth":4,"bounds":{"left":0.0,"top":0.40782124,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team - Backlog - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.41939345,"width":0.053025264,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Userpilot | Events","depth":4,"bounds":{"left":0.0,"top":0.4405427,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Userpilot | Events","depth":5,"bounds":{"left":0.013297873,"top":0.4521149,"width":0.030418882,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.47486034,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to main content","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle organization menu","depth":11,"bounds":{"left":0.08643617,"top":0.059856344,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Issues","depth":12,"bounds":{"left":0.0809508,"top":0.09736632,"width":0.021609042,"height":0.050678372},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":14,"bounds":{"left":0.0866024,"top":0.13048683,"width":0.010305851,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":12,"bounds":{"left":0.0809508,"top":0.14804469,"width":0.021609042,"height":0.050678372},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":14,"bounds":{"left":0.08577128,"top":0.1811652,"width":0.011968086,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboards","depth":12,"bounds":{"left":0.0809508,"top":0.19872306,"width":0.021609042,"height":0.05027933},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dashboards","depth":14,"bounds":{"left":0.08211436,"top":0.23184358,"width":0.019281914,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Monitors","depth":12,"bounds":{"left":0.0809508,"top":0.2490024,"width":0.021609042,"height":0.050678372},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Monitors","depth":14,"bounds":{"left":0.084773935,"top":0.2821229,"width":0.013962766,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":12,"bounds":{"left":0.0809508,"top":0.29968077,"width":0.021609042,"height":0.050678372},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.08494016,"top":0.33280128,"width":0.013630319,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Try Business","depth":10,"bounds":{"left":0.08643617,"top":0.88667196,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"What's New","depth":10,"bounds":{"left":0.08643617,"top":0.9114126,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Help","depth":10,"bounds":{"left":0.08643617,"top":0.93615323,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"lukas.kovalik@jiminny.com","depth":10,"bounds":{"left":0.08643617,"top":0.9680766,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Issues","depth":13,"bounds":{"left":0.04305186,"top":0.066640064,"width":0.014461436,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":13,"bounds":{"left":0.088597074,"top":0.061452515,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Feed","depth":15,"bounds":{"left":0.039727394,"top":0.10055866,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed","depth":17,"bounds":{"left":0.044049203,"top":0.10734238,"width":0.010638298,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Errors & Outages","depth":15,"bounds":{"left":0.039727394,"top":0.14046289,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Errors & Outages","depth":17,"bounds":{"left":0.044049203,"top":0.14724661,"width":0.03673537,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Breached Metrics","depth":15,"bounds":{"left":0.039727394,"top":0.16759777,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Breached Metrics","depth":17,"bounds":{"left":0.044049203,"top":0.17438148,"width":0.037898935,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Warnings","depth":15,"bounds":{"left":0.039727394,"top":0.19473264,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Warnings","depth":17,"bounds":{"left":0.044049203,"top":0.20151636,"width":0.019946808,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"User Feedback","depth":15,"bounds":{"left":0.039727394,"top":0.22186752,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"User Feedback","depth":17,"bounds":{"left":0.044049203,"top":0.22865124,"width":0.032081116,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Autofix","depth":13,"bounds":{"left":0.039727394,"top":0.26177174,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Autofix","depth":16,"bounds":{"left":0.043716755,"top":0.26855546,"width":0.016289894,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Recently Run","depth":15,"bounds":{"left":0.039727394,"top":0.28731045,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Recently Run","depth":17,"bounds":{"left":0.044049203,"top":0.29409418,"width":0.028922873,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All Views","depth":15,"bounds":{"left":0.039727394,"top":0.3272147,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Views","depth":17,"bounds":{"left":0.044049203,"top":0.3339984,"width":0.019281914,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Configure","depth":14,"bounds":{"left":0.043716755,"top":0.3735036,"width":0.021941489,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Alerts Moved","depth":15,"bounds":{"left":0.039727394,"top":0.39225858,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Alerts","depth":17,"bounds":{"left":0.044049203,"top":0.3990423,"width":0.012799202,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Moved","depth":17,"bounds":{"left":0.08045213,"top":0.39984038,"width":0.012466756,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":12,"bounds":{"left":0.10954122,"top":0.06464485,"width":0.013796543,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":14,"bounds":{"left":0.10954122,"top":0.066640064,"width":0.013796543,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View Project Details","depth":13,"bounds":{"left":0.1299867,"top":0.06624102,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"APP-1DTF","depth":16,"bounds":{"left":0.13796543,"top":0.066640064,"width":0.021609042,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Ask Seer","depth":10,"bounds":{"left":0.93484044,"top":0.059856344,"width":0.04720745,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Seer","depth":13,"bounds":{"left":0.9461436,"top":0.0650439,"width":0.019614361,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"bounds":{"left":0.9740692,"top":0.065442935,"width":0.0021609042,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Give Feedback","depth":11,"bounds":{"left":0.9840425,"top":0.059856344,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError","depth":13,"bounds":{"left":0.10954122,"top":0.10295291,"width":0.03174867,"height":0.017557861},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View events","depth":13,"bounds":{"left":0.9409907,"top":0.10654429,"width":0.026097074,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Events (total)","depth":14,"bounds":{"left":0.9409907,"top":0.10654429,"width":0.026097074,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Users (90d)","depth":13,"bounds":{"left":0.9724069,"top":0.10654429,"width":0.022273935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Level: Error","depth":15,"bounds":{"left":0.10920878,"top":0.12490024,"width":0.02443484,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218","depth":14,"bounds":{"left":0.11253324,"top":0.12490024,"width":0.453125,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2.4K","depth":13,"bounds":{"left":0.9534575,"top":0.12210695,"width":0.013630319,"height":0.017557861},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"bounds":{"left":0.99052525,"top":0.12210695,"width":0.004155585,"height":0.017557861},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ongoing","depth":14,"bounds":{"left":0.10954122,"top":0.14046289,"width":0.018118352,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/app/Jobs/AutomatedReports/SendReportJob.php in Jiminny\\Jobs\\AutomatedReports\\SendReportJob::handle","depth":13,"bounds":{"left":0.13447474,"top":0.14046289,"width":0.24534574,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Quick Fix","depth":14,"bounds":{"left":0.3912899,"top":0.14046289,"width":0.019614361,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Resolve","depth":12,"bounds":{"left":0.10954122,"top":0.16719872,"width":0.02543218,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resolve","depth":14,"bounds":{"left":0.11353058,"top":0.17238627,"width":0.017453458,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More resolve options","depth":12,"bounds":{"left":0.13464096,"top":0.16719872,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Archive","depth":12,"bounds":{"left":0.14660904,"top":0.16719872,"width":0.025265958,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Archive","depth":14,"bounds":{"left":0.1505984,"top":0.17238627,"width":0.017287234,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Archive options","depth":12,"bounds":{"left":0.17154256,"top":0.16719872,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Subscribe","depth":12,"bounds":{"left":0.18351063,"top":0.16719872,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share","depth":12,"bounds":{"left":0.19547872,"top":0.16719872,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More Actions","depth":12,"bounds":{"left":0.20744681,"top":0.16719872,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Priority","depth":12,"bounds":{"left":0.89544547,"top":0.17398244,"width":0.015791224,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Modify issue priority","depth":12,"bounds":{"left":0.9125665,"top":0.17039107,"width":0.013962766,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"High","depth":17,"bounds":{"left":0.91954786,"top":0.18076617,"width":0.008976064,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assignee","depth":12,"bounds":{"left":0.9318484,"top":0.17398244,"width":0.019946808,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Modify issue assignee","depth":13,"bounds":{"left":0.953125,"top":0.16999201,"width":0.04155585,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":17,"bounds":{"left":0.9616024,"top":0.17398244,"width":0.027593086,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"production-eu, production","depth":13,"bounds":{"left":0.10954122,"top":0.20949721,"width":0.07363697,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"production-eu, production","depth":17,"bounds":{"left":0.11353058,"top":0.2150838,"width":0.059674203,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"24H","depth":13,"bounds":{"left":0.18284574,"top":0.20949721,"width":0.023271276,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"24H","depth":17,"bounds":{"left":0.18683511,"top":0.21628092,"width":0.00930851,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8664737132885339448
|
-2577938310429312860
|
click
|
accessibility
|
NULL
|
Unnamed Group
TypeError: League\Flysystem\Filesyst Unnamed Group
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
Close tab
CloudWatch | us-east-2
CloudWatch | us-east-2
test (885333) - jiminny/app
test (885333) - jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking for automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking for automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
Platform Team - Backlog - Jira
Platform Team - Backlog - Jira
Userpilot | Events
Userpilot | Events
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to main content
Skip to main content
Toggle organization menu
Issues
Issues
Explore
Explore
Dashboards
Dashboards
Monitors
Monitors
Settings
Settings
Try Business
What's New
Help
[EMAIL]
Issues
Expand
Feed
Feed
Errors & Outages
Errors & Outages
Breached Metrics
Breached Metrics
Warnings
Warnings
User Feedback
User Feedback
Autofix
Autofix
Recently Run
Recently Run
All Views
All Views
Configure
Alerts Moved
Alerts
Moved
Issues
Issues
View Project Details
APP-1DTF
Ask Seer
Ask Seer
/
Give Feedback
TypeError
View events
Events (total)
Users (90d)
Level: Error
League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218
2.4K
0
Ongoing
/app/Jobs/AutomatedReports/SendReportJob.php in Jiminny\Jobs\AutomatedReports\SendReportJob::handle
Quick Fix
Resolve
Resolve
More resolve options
Archive
Archive
Archive options
Subscribe
Share
More Actions
Priority
Modify issue priority
High
Assignee
Modify issue assignee
Nikolay Nikolov
production-eu, production
production-eu, production
24H
24H...
|
25937
|
NULL
|
NULL
|
NULL
|
|
10534
|
476
|
25
|
2026-05-08T17:32:39.231811+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778261559231_m2.jpg...
|
Code
|
Review payment logger au… — docker [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 55 pending changes
55
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: docker [SSH: nas]
Explorer Section: docker [SSH: nas]
DOCKER [SSH: NAS]
dawarich
dsk-uploader
flask-app
garmin-connector
gitea
health
health-tracker
homarr
hst
immich
jellyfinht
kavita
libreoffice
linkwarden
location-logger
alembic
app
mcp-server
.env
.env.example
.gitignore
.mcp.json
M
alembic.ini
docker-compose.yml
M
Dockerfile
README.md
M
requirements.txt
M
today_map.html
mariadb
meeting-detector
mindfulmama
n8n
notifier-app
npm
oauth
obsidian
ollama
open-webui
openttd
openvpn-client
orchestrator
outfit-app
owntracks-stack
paperlessngx
payments-logger
.claude
backend
frontend
.env
.env.example
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
docker-compose.yml, Editor Group 1
Review payment logger au…, Editor Group 2
remote SSH: nas
SSH: nas
location-logger (Git)
location-logger
location-logger (Git) - main*, Checkout Branch/Tag...
main*
location-logger (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
expanded
Clear
Review payment logger authorization implementation
Session history
New session
Message actions
review payment_logger project how toes authorization work
Thinking
Thinking
Let me explore the payment_logger project structure first.
Bash
Find payment_logger project files
IN
find /volume2/docker -type f -name "*.py" -o -name "*.yml" -o -name "*.yaml" -o -name "*.env" -o -name "*.toml" -o -name "*.cfg" | grep -i payment | head -50
Copy code to clipboard
OUT
bfs: error: /volume2/docker/portnotedb/pg_commit_ts: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_dynshmem: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_notify: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_serial: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_snapshots: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_subtrans: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_twophase: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_multixact: Permission denied.
bfs: error: /volume2/docker/portnotedb/base: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_replslot: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_tblspc: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_stat: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_stat_tmp: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_xact: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_logical: Permission denied.
bfs: error: /volume2/docker/openttd/.dbus: Permission denied.
bfs: error: /volume2/docker/immich/db: Permission denied.
bfs: error: /volume2/docker/paperlessngx/db: Permission denied.
bfs: error: /volume2/docker/appflowy/postgres: Permission denied.
bfs: error: /volume2/docker/auth/db: Permission denied.
bfs: error: /volume2/docker/openttd/.XDG/dbus-1: Permission denied.
bfs: error: /volume2/docker/openttd/.config/pulse: Permission denied.
bfs: error: /volume2/docker/openttd/.cache/openbox/sessions: Permission denied.
/volume2/docker/payments-logger/.env
/volume2/docker/payments-logger/docker-compose.yml
/volume2/docker/payments-logger/backend/prisma/migrations/migration_lock.toml
Bash
List docker directory contents
IN
ls /volume2/docker/
Copy code to clipboard
OUT
adguard
ai-stack
app-db
appflowy
audiobookshelf
auth
beszel
bitwarden
dawarich
dsk-uploader
flask-app
garmin-connector
gitea
health
health-tracker
homarr
hst
immich
jellyfinht
kavita
libreoffice
linkwarden
location-logger
mariadb
meeting-detector
mindfulmama
n8n
notifier-app
npm
oauth
obsidian
ollama
openttd
openvpn-client
open-webui
orchestrator
outfit-app
owntracks-stack
paperlessngx
payments-logger
personal-log
personal-log-system
player
portainer
portnotedb
reminders-app
romm
second-brain
static
stirling
syncthing
tailscale
temp-logger
test-app
tmp
torrent-stack
tree
trilium
tubearchivist
twenty
uptimekuma
ytptube
Agent:
Explore payment_logger authorization code
IN
Explore the payments-logger project at /volume2/docker/payments-logger and give me a thorough understanding of how authorization works. I need to know:
1. What auth mechanism is used (JWT, sessions, API keys, OAuth, etc.)
2. Where auth is enforced (middleware, decorators, route guards, etc.)
3. What roles/permissions exist
4. How tokens are issued, validated, and refreshed
5. Any auth-related config (env vars, settings)
Please read the key source files and give me a clear summary with file paths and line numbers for the important parts.
Bash
IN
find /volume2/docker/payments-logger -type f -name "*.py" -o -name "*.json" -o -name "*.yml" -o -name "*.yaml" | grep -E "(auth|token|jwt|session|permission|role)" | head -20
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
IN
ls -la /volume2/docker/payments-logger/ 2>/dev/null || echo "Directory not found"
Copy code to clipboard
OUT
total 36
drwxrwxrwx 1 Adm1n admin 162 Mar 29 18:01 .
drwxrwxrwx 1 root root 1146 Apr 26 18:49 ..
-rwxrwxrwx 1 Adm1n admin 15233 Feb 22 17:08 API.md
drwxrwxrwx 1 Adm1n admin 88 Mar 29 15:41 backend
drwxrwxrwx 1 Adm1n admin 38 Mar 29 17:07 .claude
-rwxrwxrwx 1 Adm1n admin 1502 Mar 29 18:01 docker-compose.yml
-rwxrwxrwx 1 Adm1n admin 1066 Mar 29 15:44 .env
-rwxrwxrwx 1 Adm1n admin 1078 Feb 14 17:53 .env.example
drwxrwxrwx 1 Adm1n admin 194 Mar 29 15:44 frontend
-rwxrwxrwx 1 Adm1n admin 19 Feb 14 17:54 .gitignore
-rwxrwxrwx 1 Adm1n admin 4052 Feb 14 19:06 README.md
Bash
IN
find /volume2/docker/payments-logger/backend -type f | head -30
Copy code to clipboard
OUT
/volume2/docker/payments-logger/backend/Dockerfile
/volume2/docker/payments-logger/backend/.dockerignore
/volume2/docker/payments-logger/backend/package.json
/volume2/docker/payments-logger/backend/prisma/schema.prisma
/volume2/docker/payments-logger/backend/src/parser.js
/volume2/docker/payments-logger/backend/src/index.js
/volume2/docker/payments-logger/backend/src/auth.js
/volume2/docker/payments-logger/backend/prisma/migrations/migration_lock.toml
/volume2/docker/payments-logger/backend/src/routes/payments.js
/volume2/docker/payments-logger/backend/prisma/migrations/20260210_init/migration.sql
/volume2/docker/payments-logger/backend/prisma/migrations/20260210_simplify/migration.sql
/volume2/docker/payments-logger/backend/prisma/migrations/20260222_add_card/migration.sql
Bash
IN
find /volume2/docker/payments-logger -type f \( -name "*.js" -o -name "*.json" -o -name "*.md" \) | sort
Copy code to clipboard
OUT
/volume2/docker/payments-logger/API.md
/volume2/docker/payments-logger/backend/package.json
/volume2/docker/payments-logger/backend/src/auth.js
/volume2/docker/payments-logger/backend/src/index.js
/volume2/docker/payments-logger/backend/src/parser.js
/volume2/docker/payments-logger/backend/src/routes/payments.js
/volume2/docker/payments-logger/.claude/settings.local.json
/volume2/docker/payments-logger/frontend/package.json
/volume2/docker/payments-logger/frontend/postcss.config.js
/volume2/docker/payments-logger/frontend/src/auth.js
/volume2/docker/payments-logger/frontend/tailwind.config.js
/volume2/docker/payments-logger/frontend/vite.config.js
/volume2/docker/payments-logger/README.md
Read
.env
.env
Read
auth.js
auth.js
Read
index.js
index.js
Read
package.json
package.json
Read
auth.js
auth.js
Read
API.md
API.md
Read
payments.js
payments.js
Read
.env.example
.env.example
Read
schema.prisma
schema.prisma
Bash
IN
grep -r "API_KEY\|auth\|token\|oauth\|hydra" /volume2/docker/payments-logger/backend/src --include="*.js" -n
Copy code to clipboard
OUT
/volume2/docker/payments-logger/backend/src/index.js:6:const { bearerTokenMiddleware, wellKnownRouter } = require('./auth');
/volume2/docker/payments-logger/backend/src/index.js:18:// ── OAuth Bearer token auth (skips public paths) ──────────────────────────────
/volume2/docker/payments-logger/backend/src/auth.js:2: * OAuth 2.1 / Hydra JWT authentication for Express.
/volume2/docker/payments-logger/backend/src/auth.js:6: * - wellKnownRouter — serves /.well-known/oauth-* discovery endpoints
/volume2/docker/payments-logger/backend/src/auth.js:33:function sendUnauthorized(res, detail, error = 'invalid_token') {
/volume2/docker/payments-logger/backend/src/auth.js:39: `resource_metadata="${realm}/.well-known/oauth-protected-resource"`,
/volume2/docker/payments-logger/backend/src/auth.js:40: `authorization_server="${HYDRA_PUBLIC_URL}"`,
/volume2/docker/payments-logger/backend/src/auth.js:52: * On success, attaches the decoded payload to req.tokenPayload.
/volume2/docker/payments-logger/backend/src/auth.js:54: * @param {Set<string>} publicPaths Paths to skip auth for.
/volume2/docker/payments-logger/backend/src/auth.js:58: '/.well-known/oauth-protected-resource',
/volume2/docker/payments-logger/backend/src/auth.js:59: '/.well-known/oauth-authorization-server',
/volume2/docker/payments-logger/backend/src/auth.js:66: const auth = req.headers.authorization || '';
/volume2/docker/payments-logger/backend/src/auth.js:67: if (!auth.toLowerCase().startsWith('bearer ')) {
/volume2/docker/payments-logger/backend/src/auth.js:68: return sendUnauthorized(res, 'Bearer token required', 'invalid_request');
/volume2/docker/payments-logger/backend/src/auth.js:71: const token = auth.slice(7).trim();
/volume2/docker/payments-logger/backend/src/auth.js:72: if (!token) {
/volume2/docker/payments-logger/backend/src/auth.js:73: return sendUnauthorized(res, 'Bearer token required', 'invalid_request');
/volume2/docker/payments-logger/backend/src/auth.js:82: const { payload } = await jwtVerify(token, getJwks(), verifyOptions);
/volume2/docker/payments-logger/backend/src/auth.js:83: req.tokenPayload = payload;
/volume2/docker/payments-logger/backend/src/auth.js:87: const error = msg.includes('expired') ? 'invalid_token' : 'invalid_token';
/volume2/docker/payments-logger/backend/src/auth.js:88: sendUnauthorized(res, msg, error);
/volume2/docker/payments-logger/backend/src/auth.js:98:wellKnownRouter.get('/.well-known/oauth-protected-resource', (_req, res) => {
/volume2/docker/payments-logger/backend/src/auth.js:103: authorization_servers: [HYDRA_PUBLIC_URL],
/volume2/docker/payments-logger/backend/src/auth.js:111:wellKnownRouter.get('/.well-known/oauth-authorization-server', async (_req, res) => {
/volume2/docker/payments-logger/backend/src/auth.js:119: authorization_endpoint: doc.authorization_endpoint,
/volume2/docker/payments-logger/backend/src/auth.js:120: token_endpoint: doc.token_endpoint,
/volume2/docker/payments-logger/backend/src/auth.js:123: grant_types_supported: doc.grant_types_supported || ['authorization_code', 'refresh_token'],
/volume2/docker/payments-logger/backend/src/auth.js:124: [API_KEY]: doc.[API_KEY] || ['none', 'client_secret_basic'],
/volume2/docker/payments-logger/backend/src/auth.js:128: id_token_signing_alg_values_supported: doc.id_token_signing_alg_values_supported || ['RS256'],
/volume2/docker/payments-logger/backend/src/routes/payments.js:58:// ── Ingest a payment (public — no auth) ──────────────────────────────────────
Bash
IN
find /volume2/docker/payments-logger/frontend/src -type f -name "*.js" -o -name "*.jsx" -o -name "*.ts" -o -name "*.tsx" | head -20
Copy code to clipboard
OUT
/volume2/docker/payments-logger/frontend/src/main.jsx
/volume2/docker/payments-logger/frontend/src/App.jsx
/volume2/docker/payments-logger/frontend/src/auth.js
/volume2/docker/payments-logger/frontend/src/components/PaymentCard.jsx
/volume2/docker/payments-logger/frontend/src/components/PaymentList.jsx
/volume2/docker/payments-logger/frontend/src/components/FilterBar.jsx
/volume2/docker/payments-logger/frontend/src/components/PaymentTable.jsx
/volume2/docker/payments-logger/frontend/src/components/AuthProvider.jsx
/volume2/docker/payments-logger/frontend/src/components/AuthCallback.jsx
Read
AuthProvider.jsx
AuthProvider.jsx
Read
AuthCallback.jsx
AuthCallback.jsx
Read
App.jsx
App.jsx
Read
main.jsx
main.jsx
Read
vite.config.js
vite.config.js
Bash
IN
grep -r "HYDRA\|VITE" /volume2/docker/payments-logger --include=".env*" -n
Copy code to clipboard
OUT
(Bash completed with no output)
Read
docker-compose.yml
docker-compose.yml
Bash
IN
grep -r "API_KEY" /volume2/docker/payments-logger/backend --include="*.js" -n
Copy code to clipboard
OUT
(Bash completed with no output)
Read
README.md
README.md
Bash
IN
grep -n "HYDRA\|oauth\|TOKEN" /volume2/docker/payments-logger/backend/src/index.js /volume2/docker/payments-logger/backend/src/auth.js | head -40
Copy code to clipboard
OUT
/volume2/docker/payments-logger/backend/src/auth.js:6: * - wellKnownRouter — serves /.well-known/oauth-* discovery endpoints
/volume2/docker/payments-logger/backend/src/auth.js:11:const HYDRA_PUBLIC_URL = (process.env.HYDRA_PUBLIC_URL || '').replace(/\/$/, '');
/volume2/docker/payments-logger/backend/src/auth.js:24: new URL(`${HYDRA_PUBLIC_URL}/.well-known/jwks.json`)
/volume2/docker/payments-logger/backend/src/auth.js:39: `resource_metadata="${realm}/.well-known/oauth-protected-resource"`,
/volume2/docker/payments-logger/backend/src/auth.js:40: `authorization_server="${HYDRA_PUBLIC_URL}"`,
/volume2/docker/payments-logger/backend/src/auth.js:58: '/.well-known/oauth-protected-resource',
/volume2/docker/payments-logger/backend/src/auth.js:59: '/.well-known/oauth-authorization-server',
/volume2/docker/payments-logger/backend/src/auth.js:78: issuer: HYDRA_PUBLIC_URL,
/volume2/docker/payments-logger/backend/src/auth.js:81: if (process.env.TOKEN_AUDIENCE) verifyOptions.audience = process.env.TOKEN_AUDIENCE;
/volume2/docker/payments-logger/backend/src/auth.js:98:wellKnownRouter.get('/.well-known/oauth-protected-resource', (_req, res) => {
/volume2/docker/payments-logger/backend/src/auth.js:103: authorization_servers: [HYDRA_PUBLIC_URL],
/volume2/docker/payments-logger/backend/src/auth.js:107: jwks_uri: `${HYDRA_PUBLIC_URL}/.well-known/jwks.json`,
/volume2/docker/payments-logger/backend/src/auth.js:111:wellKnownRouter.get('/.well-known/oauth-authorization-server', async (_req, res) => {
/volume2/docker/payments-logger/backend/src/auth.js:113: const r = await fetch(`${HYDRA_PUBLIC_URL}/.well-known/openid-configuration`);
/volume2/docker/payments-logger/backend/src/auth.js:118: issuer: doc.issuer || HYDRA_PUBLIC_URL,
Thinking
Thinking
payments-logger Authorization Overview
payments-logger Authorization Overview
The project uses
OAuth 2.1 with PKCE
via an external Hydra OAuth server at
hydra.lakylak.xyz
.
Auth Flow
Auth Flow
Frontend
(
frontend/src/auth.js
frontend/src/auth.js
):
Fetches OAuth server metadata via discovery endpoint
Generates a PKCE code verifier/challenge (SHA-256)
Redirects user to Hydra login with
code_challenge
On callback, exchanges code + verifier for tokens
Stores
access_token
,
refresh_token
in
localStorage
(
pl_oauth_tokens
)
Auto-refreshes token 30 seconds before expiry
Backend
(
backend/src/auth.js
backend/src/auth.js
):
bearerTokenMiddleware
validates the
Authorization: Bearer <token>
header
Fetches Hydra's JWKS (cached 300s) and verifies JWT signature (RS256/ES256/PS256)
Validates issuer (
https://hydra.lakylak.xyz
) and optional audience
Enforcement
Enforcement
Applied globally in
backend/src/index.js:19
backend/src/index.js:19
with these
public (unprotected) paths
:
/.well-known/oauth-protected-resource
/.well-known/oauth-authorization-server
/api/health
/api/payments/ingest
(rate-limited at 200 req/min — for SMS ingestion)
Roles/Permissions
Roles/Permissions
No RBAC
— it's binary: authenticated vs. unauthenticated. Required scopes:
openid
,
offline_access
.
Key Security Notes
Key Security Notes
PKCE
prevents authorization code interception
State parameter
provides CSRF protection
No server-side token storage
— validation is stateless via JWKS
The README/API docs mention an
X-API-Key
header, but that's
outdated
— the actual code uses Bearer tokens only
Config lives in
docker-compose.yml
docker-compose.yml
(lines 30–33):
HYDRA_PUBLIC_URL
,
REQUIRED_SCOPES
,
OAUTH_CLIENT_ID
, and optionally
TOKEN_AUDIENCE
/
JWKS_CACHE_TTL
.
Message actions
compare it to location logger and make it the same. Lets remove hydra and only use authentic (or whatever location logger uses).
Thinking
Thinking
Let me first explore how location-logger handles authorization.
Agent:
Explore location-logger authorization code
IN
Explore the location-logger project at /volume2/docker/location-logger and give me a thorough understanding of how authorization works. I need to know:
1. What auth mechanism is used (JWT, sessions, API keys, OAuth, etc.)
2. Where auth is enforced (middleware, decorators, route guards, etc.)
3. What roles/permissions exist
4. How tokens are issued, validated, and refreshed
5. Any auth-related config (env vars, settings)
6. Frontend auth flow (how the user logs in, how tokens are stored and used)
7. The full directory/file structure of the project
Please read ALL relevant source files completely and give me a detailed summary with file paths and line numbers. I need enough detail to replicate this auth system in another project.
Bash
IN
find /volume2/docker/location-logger -type f -name "*.py" -o -name "*.js" -o -name "*.ts" -o -name "*.json" | head -50
Copy code to clipboard
OUT
/volume2/docker/location-logger/.mcp.json
/volume2/docker/location-logger/app/__init__.py
/volume2/docker/location-logger/app/utils.py
/volume2/docker/location-logger/app/config.py
/volume2/docker/location-logger/app/main.py
/volume2/docker/location-logger/alembic/env.py
/volume2/docker/location-logger/mcp-server/server.py
/volume2/docker/location-logger/alembic/versions/20260203_201500_create_location_points_table.py
/volume2/docker/location-logger/alembic/versions/20260209_200000_add_enhanced_fields_and_tables.py
/volume2/docker/location-logger/alembic/versions/20260214_000000_add_users_and_audit_logs.py
/volume2/docker/location-logger/alembic/versions/20260320_000000_add_audit_query_string.py
/volume2/docker/location-logger/app/services/geofence_service.py
/volume2/docker/location-logger/app/services/recorder_service.py
/volume2/docker/location-logger/app/services/trip_service.py
/volume2/docker/location-logger/app/services/enhanced_location_service.py
/volume2/docker/location-logger/app/services/geocoding_service.py
/volume2/docker/location-logger/app/clients/__init__.py
/volume2/docker/location-logger/app/clients/dawarich_client.py
/volume2/docker/location-logger/app/clients/owntracks_client.py
/volume2/docker/location-logger/app/models/areas.py
/volume2/docker/location-logger/app/models/geofence_events.py
/volume2/docker/location-logger/app/models/trips.py
/volume2/docker/location-logger/app/models/user.py
/volume2/docker/location-logger/app/models/location.py
/volume2/docker/location-logger/app/models/audit_log.py
/volume2/docker/location-logger/app/auth/__init__.py
/volume2/docker/location-logger/app/auth/dependencies.py
/volume2/docker/location-logger/app/auth/utils.py
/volume2/docker/location-logger/app/api/enhanced_endpoints.py
/volume2/docker/location-logger/app/db/base.py
/volume2/docker/location-logger/app/db/session.py
Bash
IN
tree -L 4 /volume2/docker/location-logger 2>/dev/null || find /volume2/docker/location-logger -type d | sort
Copy code to clipboard
OUT
/volume2/docker/location-logger
├── alembic
│ ├── env.py
│ ├── script.py.mako
│ └── versions
│ ├── 20260203_201500_create_location_points_table.py
│ ├── 20260209_200000_add_enhanced_fields_and_tables.py
│ ├── 20260214_000000_add_users_and_audit_logs.py
│ ├── 20260320_000000_add_audit_query_string.py
│ └── __pycache__
│ └── 20260214_000000_add_users_and_audit_logs.cpython-311.pyc
├── alembic.ini
├── app
│ ├── api
│ │ └── enhanced_endpoints.py
│ ├── auth
│ │ ├── dependencies.py
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ │ ├── dependencies.cpython-311.pyc
│ │ │ ├── __init__.cpython-311.pyc
│ │ │ └── utils.cpython-311.pyc
│ │ └── utils.py
│ ├── clients
│ │ ├── dawarich_client.py
│ │ ├── __init__.py
│ │ └── owntracks_client.py
│ ├── config.py
│ ├── db
│ │ ├── base.py
│ │ └── session.py
│ ├── __init__.py
│ ├── main.py
│ ├── models
│ │ ├── areas.py
│ │ ├── audit_log.py
│ │ ├── geofence_events.py
│ │ ├── location.py
│ │ ├── __pycache__
│ │ │ ├── audit_log.cpython-311.pyc
│ │ │ └── user.cpython-311.pyc
│ │ ├── trips.py
│ │ └── user.py
│ ├── __pycache__
│ │ ├── __init__.cpython-311.pyc
│ │ └── main.cpython-311.pyc
│ ├── services
│ │ ├── enhanced_location_service.py
│ │ ├── geocoding_service.py
│ │ ├── geofence_service.py
│ │ ├── recorder_service.py
│ │ └── trip_service.py
│ ├── static
│ │ └── dashboard.html
│ └── utils.py
├── docker-compose.yml
├── Dockerfile
├── mcp-server
│ ├── Dockerfile
│ ├── requirements.txt
│ └── server.py
├── README.md
├── requirements.txt
└── today_map.html
16 directories, 48 files
Read
utils.py
utils.py
Read
dependencies.py
dependencies.py
Read
user.py
user.py
Read
config.py
config.py
Read
main.py
main.py
Read
session.py
session.py
Read
dashboard.html
dashboard.html
Read
audit_log.py
audit_log.py
Read
20260214_000000_add_users_and_audit_logs.py
20260214_000000_add_users_and_audit_logs.py
Read
20260320_000000_add_audit_query_string.py
20260320_000000_add_audit_query_string.py
Read
README.md
README.md
Read
requirements.txt
requirements.txt
Read
server.py
server.py
Read
server.py
server.py
(lines 101-400)
Thinking
Thinking
Now I have a full picture of both systems. Let me read the payments-logger source files before planning the migration.
Bash
List all payments-logger files
IN
find /volume2/docker/payments-logger -type f | grep -v node_modules | grep -v .git | sort
Copy code to clipboard
OUT
/volume2/docker/payments-logger/API.md
/volume2/docker/payments-logger/backend/Dockerfile
/volume2/docker/payments-logger/backend/.dockerignore
/volume2/docker/payments-logger/backend/package.json
/volume2/docker/payments-logger/backend/prisma/migrations/20260210_init/migration.sql
/volume2/docker/payments-logger/backend/prisma/migrations/20260210_simplify/migration.sql
/volume2/docker/payments-logger/backend/prisma/migrations/20260222_add_card/migration.sql
/volume2/docker/payments-logger/backend/prisma/migrations/migration_lock.toml
/volume2/docker/payments-logger/backend/prisma/schema.prisma
/volume2/docker/payments-logger/backend/src/auth.js
/volume2/docker/payments-logger/backend/src/index.js
/volume2/docker/payments-logger/backend/src/parser.js
/volume2/docker/payments-logger/backend/src/routes/payments.js
/volume2/docker/payments-logger/.claude/settings.local.json
/volume2/docker/payments-logger/docker-compose.yml
/volume2/docker/payments-logger/.env
/volume2/docker/payments-logger/.env.example
/volume2/docker/payments-logger/frontend/Dockerfile
/volume2/docker/payments-logger/frontend/.dockerignore
/volume2/docker/payments-logger/frontend/index.html
/volume2/docker/payments-logger/frontend/package.json
/volume2/docker/payments-logger/frontend/postcss.config.js
/volume2/docker/payments-logger/frontend/src/App.jsx
/volume2/docker/payments-logger/frontend/src/auth.js
/volume2/docker/payments-logger/frontend/src/components/AuthCallback.jsx
/volume2/docker/payments-logger/frontend/src/components/AuthProvider.jsx
/volume2/docker/payments-logger/frontend/src/components/FilterBar.jsx
/volume2/docker/payments-logger/frontend/src/components/PaymentCard.jsx
/volume2/docker/payments-logger/frontend/src/components/PaymentList.jsx
/volume2/docker/payments-logger/frontend/src/components/PaymentTable.jsx
/volume2/docker/payments-logger/frontend/src/index.css
/volume2/docker/payments-logger/frontend/src/main.jsx
/volume2/docker/payments-logger/frontend/tailwind.config.js
/volume2/docker/payments-logger/frontend/vite.config.js
/volume2/docker/payments-logger/README.md
Read
auth.js
auth.js
Read
index.js
index.js
Read
auth.js
auth.js
Read
AuthProvider.jsx
AuthProvider.jsx
Read
package.json
package.json
Read
AuthCallback.jsx
AuthCallback.jsx
Read
schema.prisma
schema.prisma
Read
docker-compose.yml
docker-compose.yml
Thinking
Thinking
Now let me read the remaining frontend files.
Read
App.jsx
App.jsx
Read
package.json
package.json
Read
.env
.env
*
Working...
Queue another message…
Queue another message…
Add
Show command menu (/)
docker-compose.yml
docker-compose.yml
Edit automatically
Edit automatically...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 55 pending changes","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"55","depth":22,"bounds":{"left":0.0076462766,"top":0.1452514,"width":0.0043218085,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: docker [SSH: nas]","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: docker [SSH: nas]","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.038231384,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"DOCKER [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.038231384,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":16,"bounds":{"left":0.025598405,"top":0.07980846,"width":0.03523936,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.0933759,"width":0.005319149,"height":0.0071827616},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"dawarich","depth":27,"bounds":{"left":0.025930852,"top":0.0933759,"width":0.017952127,"height":0.006384677},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.105347164,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"dsk-uploader","depth":27,"bounds":{"left":0.025930852,"top":0.105347164,"width":0.026928192,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.10614525,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.028590426,"top":0.10614525,"width":0.024268618,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.10614525,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.12290503,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"flask-app","depth":27,"bounds":{"left":0.025930852,"top":0.12290503,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.123703115,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.027593086,"top":0.123703115,"width":0.017287234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.123703115,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.14046289,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"garmin-connector","depth":27,"bounds":{"left":0.025930852,"top":0.14046289,"width":0.036236703,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.14126097,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":15,"bounds":{"left":0.028590426,"top":0.14126097,"width":0.033909574,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.15802075,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"gitea","depth":27,"bounds":{"left":0.025930852,"top":0.15802075,"width":0.009973404,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.15881884,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028590426,"top":0.15881884,"width":0.00731383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.17557861,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"health","depth":27,"bounds":{"left":0.025930852,"top":0.17557861,"width":0.012300532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.1763767,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.028590426,"top":0.1763767,"width":0.009973404,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.19313647,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"health-tracker","depth":27,"bounds":{"left":0.025930852,"top":0.19313647,"width":0.028590426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.19393456,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.028590426,"top":0.19393456,"width":0.025930852,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.21069433,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"homarr","depth":27,"bounds":{"left":0.025930852,"top":0.21069433,"width":0.014295213,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.21149242,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.028590426,"top":0.21149242,"width":0.011968086,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.22825219,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"hst","depth":27,"bounds":{"left":0.025930852,"top":0.22825219,"width":0.0063164895,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.22905028,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.028590426,"top":0.22905028,"width":0.003656915,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.24581006,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"immich","depth":27,"bounds":{"left":0.025930852,"top":0.24581006,"width":0.01462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.24660814,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.026928192,"top":0.24660814,"width":0.013630319,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.26336792,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jellyfinht","depth":27,"bounds":{"left":0.025930852,"top":0.26336792,"width":0.016954787,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.264166,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.026928192,"top":0.264166,"width":0.016289894,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.28092578,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"kavita","depth":27,"bounds":{"left":0.025930852,"top":0.28092578,"width":0.011635638,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.28172386,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.02825798,"top":0.28172386,"width":0.009640957,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.29848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"libreoffice","depth":27,"bounds":{"left":0.025930852,"top":0.29848364,"width":0.020279255,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.29928172,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.026928192,"top":0.29928172,"width":0.019281914,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.3160415,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"linkwarden","depth":27,"bounds":{"left":0.025930852,"top":0.3160415,"width":0.021609042,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.31683958,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.026928192,"top":0.31683958,"width":0.020611702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.33359936,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"location-logger","depth":27,"bounds":{"left":0.025930852,"top":0.33359936,"width":0.030917553,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.33439744,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.026928192,"top":0.33439744,"width":0.029920213,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.33439744,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.35115722,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alembic","depth":27,"bounds":{"left":0.028590426,"top":0.35115722,"width":0.015625,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.3519553,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.030917553,"top":0.3519553,"width":0.013297873,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.3519553,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.36871508,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.028590426,"top":0.36871508,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.36951315,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.030917553,"top":0.36951315,"width":0.005319149,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.36951315,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.38627294,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"mcp-server","depth":27,"bounds":{"left":0.028590426,"top":0.38627294,"width":0.023271276,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.38707104,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.032247342,"top":0.38707104,"width":0.019946808,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.40223464,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"bounds":{"left":0.028590426,"top":0.4038308,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.4046289,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.029920213,"top":0.4046289,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.4197925,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"bounds":{"left":0.028590426,"top":0.42138866,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.42218676,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.029920213,"top":0.42218676,"width":0.024933511,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.43735036,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.028590426,"top":0.43894652,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.43974462,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.029920213,"top":0.43974462,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.45490822,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".mcp.json","depth":27,"bounds":{"left":0.028590426,"top":0.45650437,"width":0.019614361,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.45730248,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.029920213,"top":0.45730248,"width":0.018284574,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.10638298,"top":0.45730248,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.47246608,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alembic.ini","depth":27,"bounds":{"left":0.028590426,"top":0.47406226,"width":0.021609042,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.47486034,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.030917553,"top":0.47486034,"width":0.019281914,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.49002394,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"bounds":{"left":0.028590426,"top":0.49162012,"width":0.042220745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.4924182,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.03125,"top":0.4924182,"width":0.03956117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.10638298,"top":0.4924182,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.50758183,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":27,"bounds":{"left":0.028590426,"top":0.509178,"width":0.020611702,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.509976,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.031914894,"top":0.509976,"width":0.017287234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.5251397,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"README.md","depth":27,"bounds":{"left":0.028590426,"top":0.52673584,"width":0.025265958,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.10638298,"top":0.5275339,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.54269755,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":27,"bounds":{"left":0.028590426,"top":0.5442937,"width":0.032912236,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.5450918,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":15,"bounds":{"left":0.03025266,"top":0.5450918,"width":0.03158245,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.10638298,"top":0.5450918,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.5602554,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"today_map.html","depth":27,"bounds":{"left":0.028590426,"top":0.56185156,"width":0.032247342,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.56264967,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.03025266,"top":0.56264967,"width":0.030585106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.5794094,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"mariadb","depth":27,"bounds":{"left":0.025930852,"top":0.5794094,"width":0.016289894,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.5802075,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.029587766,"top":0.5802075,"width":0.012965426,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.5969673,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"meeting-detector","depth":27,"bounds":{"left":0.025930852,"top":0.5969673,"width":0.03557181,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.5977654,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":15,"bounds":{"left":0.029587766,"top":0.5977654,"width":0.031914894,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.61452514,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"mindfulmama","depth":27,"bounds":{"left":0.025930852,"top":0.61452514,"width":0.027260639,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.61532325,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.029587766,"top":0.61532325,"width":0.023603724,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.632083,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"n8n","depth":27,"bounds":{"left":0.025930852,"top":0.632083,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.6328811,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.028590426,"top":0.6328811,"width":0.004986702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.64964086,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"notifier-app","depth":27,"bounds":{"left":0.025930852,"top":0.64964086,"width":0.023603724,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.65043896,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.028590426,"top":0.65043896,"width":0.020944148,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.6671987,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"npm","depth":27,"bounds":{"left":0.025930852,"top":0.6671987,"width":0.008976064,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.6847566,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"oauth","depth":27,"bounds":{"left":0.025930852,"top":0.6847566,"width":0.011303191,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.6855547,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028590426,"top":0.6855547,"width":0.008976064,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.70231444,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"obsidian","depth":27,"bounds":{"left":0.025930852,"top":0.70231444,"width":0.016954787,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.70311254,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.028590426,"top":0.70311254,"width":0.014295213,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.7198723,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ollama","depth":27,"bounds":{"left":0.025930852,"top":0.7198723,"width":0.012965426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.7206704,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.028590426,"top":0.7206704,"width":0.010638298,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.73743016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"open-webui","depth":27,"bounds":{"left":0.025930852,"top":0.73743016,"width":0.023936171,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.73822826,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.028590426,"top":0.73822826,"width":0.021276595,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.754988,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"openttd","depth":27,"bounds":{"left":0.025930852,"top":0.754988,"width":0.015625,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.7557861,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.028590426,"top":0.7557861,"width":0.013297873,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.7725459,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"openvpn-client","depth":27,"bounds":{"left":0.025930852,"top":0.7725459,"width":0.030585106,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.773344,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.028590426,"top":0.773344,"width":0.027925532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.79010373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"orchestrator","depth":27,"bounds":{"left":0.025930852,"top":0.79010373,"width":0.024933511,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.79090184,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.028590426,"top":0.79090184,"width":0.022273935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.8076616,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"outfit-app","depth":27,"bounds":{"left":0.025930852,"top":0.8076616,"width":0.020279255,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.8084597,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.028590426,"top":0.8084597,"width":0.01761968,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.82521945,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"owntracks-stack","depth":27,"bounds":{"left":0.025930852,"top":0.82521945,"width":0.03357713,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.82601756,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.028590426,"top":0.82601756,"width":0.030917553,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.8427773,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"paperlessngx","depth":27,"bounds":{"left":0.025930852,"top":0.8427773,"width":0.026928192,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.8435754,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.028590426,"top":0.8435754,"width":0.024268618,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.8603352,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger","depth":27,"bounds":{"left":0.025930852,"top":0.8603352,"width":0.034574468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.8611333,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.028590426,"top":0.8611333,"width":0.031914894,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.87789303,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".claude","depth":27,"bounds":{"left":0.028590426,"top":0.87789303,"width":0.01462766,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.8954509,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":27,"bounds":{"left":0.028590426,"top":0.8954509,"width":0.017287234,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.91300875,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":27,"bounds":{"left":0.028590426,"top":0.91300875,"width":0.017287234,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.92897046,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"bounds":{"left":0.028590426,"top":0.93056667,"width":0.00831117,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.9465283,"width":0.0063164895,"height":0.0007980846},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"bounds":{"left":0.028590426,"top":0.9465283,"width":0.025930852,"height":0.0007980846},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"docker-compose.yml, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.047885075,"width":0.0674867,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.15159574,"top":0.07821229,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"docker-compose.yml, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.0933759,"width":0.38031915,"height":0.0007980846},"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Review payment logger au…, Editor Group 2","depth":28,"bounds":{"left":0.5578458,"top":0.047885075,"width":0.07679521,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"location-logger (Git)","depth":16,"bounds":{"left":0.030917553,"top":0.98244214,"width":0.03756649,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"location-logger","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.03025266,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"location-logger (Git) - main*, Checkout Branch/Tag...","depth":16,"bounds":{"left":0.06815159,"top":0.98244214,"width":0.019614361,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.069148935,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"main*","depth":17,"bounds":{"left":0.07446808,"top":0.9856345,"width":0.012300532,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"location-logger (Git) - Synchronize Changes","depth":16,"bounds":{"left":0.08743351,"top":0.98244214,"width":0.0076462766,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.09740692,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.09906915,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.1043883,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.109042555,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.1143617,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.12167553,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.12333777,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.12865691,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"expanded","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Clear","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Review payment logger authorization implementation","depth":19,"bounds":{"left":0.56017286,"top":0.08060654,"width":0.099734046,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"bounds":{"left":0.9780585,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"bounds":{"left":0.9886968,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"review payment_logger project how toes authorization work","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me explore the payment_logger project structure first.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Find payment_logger project files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume2/docker -type f -name \"*.py\" -o -name \"*.yml\" -o -name \"*.yaml\" -o -name \"*.env\" -o -name \"*.toml\" -o -name \"*.cfg\" | grep -i payment | head -50","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"bfs: error: /volume2/docker/portnotedb/pg_commit_ts: Permission denied.\nbfs: error: /volume2/docker/portnotedb/pg_dynshmem: Permission denied.\nbfs: error: /volume2/docker/portnotedb/pg_notify: Permission denied.\nbfs: error: /volume2/docker/portnotedb/pg_serial: Permission denied.\nbfs: error: /volume2/docker/portnotedb/pg_snapshots: Permission denied.\nbfs: error: /volume2/docker/portnotedb/pg_subtrans: Permission denied.\nbfs: error: /volume2/docker/portnotedb/pg_twophase: Permission denied.\nbfs: error: /volume2/docker/portnotedb/pg_multixact: Permission denied.\nbfs: error: /volume2/docker/portnotedb/base: Permission denied.\nbfs: error: /volume2/docker/portnotedb/pg_replslot: Permission denied.\nbfs: error: /volume2/docker/portnotedb/pg_tblspc: Permission denied.\nbfs: error: /volume2/docker/portnotedb/pg_stat: Permission denied.\nbfs: error: /volume2/docker/portnotedb/pg_stat_tmp: Permission denied.\nbfs: error: /volume2/docker/portnotedb/pg_xact: Permission denied.\nbfs: error: /volume2/docker/portnotedb/pg_logical: Permission denied.\nbfs: error: /volume2/docker/openttd/.dbus: Permission denied.\nbfs: error: /volume2/docker/immich/db: Permission denied.\nbfs: error: /volume2/docker/paperlessngx/db: Permission denied.\nbfs: error: /volume2/docker/appflowy/postgres: Permission denied.\nbfs: error: /volume2/docker/auth/db: Permission denied.\nbfs: error: /volume2/docker/openttd/.XDG/dbus-1: Permission denied.\nbfs: error: /volume2/docker/openttd/.config/pulse: Permission denied.\nbfs: error: /volume2/docker/openttd/.cache/openbox/sessions: Permission denied.\n/volume2/docker/payments-logger/.env\n/volume2/docker/payments-logger/docker-compose.yml\n/volume2/docker/payments-logger/backend/prisma/migrations/migration_lock.toml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List docker directory contents","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume2/docker/","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"adguard\nai-stack\napp-db\nappflowy\naudiobookshelf\nauth\nbeszel\nbitwarden\ndawarich\ndsk-uploader\nflask-app\ngarmin-connector\ngitea\nhealth\nhealth-tracker\nhomarr\nhst\nimmich\njellyfinht\nkavita\nlibreoffice\nlinkwarden\nlocation-logger\nmariadb\nmeeting-detector\nmindfulmama\nn8n\nnotifier-app\nnpm\noauth\nobsidian\nollama\nopenttd\nopenvpn-client\nopen-webui\norchestrator\noutfit-app\nowntracks-stack\npaperlessngx\npayments-logger\npersonal-log\npersonal-log-system\nplayer\nportainer\nportnotedb\nreminders-app\nromm\nsecond-brain\nstatic\nstirling\nsyncthing\ntailscale\ntemp-logger\ntest-app\ntmp\ntorrent-stack\ntree\ntrilium\ntubearchivist\ntwenty\nuptimekuma\nytptube","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore payment_logger authorization code","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the payments-logger project at /volume2/docker/payments-logger and give me a thorough understanding of how authorization works. I need to know:\n\n1. What auth mechanism is used (JWT, sessions, API keys, OAuth, etc.)\n2. Where auth is enforced (middleware, decorators, route guards, etc.)\n3. What roles/permissions exist\n4. How tokens are issued, validated, and refreshed\n5. Any auth-related config (env vars, settings)\n\nPlease read the key source files and give me a clear summary with file paths and line numbers for the important parts.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume2/docker/payments-logger -type f -name \"*.py\" -o -name \"*.json\" -o -name \"*.yml\" -o -name \"*.yaml\" | grep -E \"(auth|token|jwt|session|permission|role)\" | head -20","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(Bash completed with no output)","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls -la /volume2/docker/payments-logger/ 2>/dev/null || echo \"Directory not found\"","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"total 36\ndrwxrwxrwx 1 Adm1n admin 162 Mar 29 18:01 .\ndrwxrwxrwx 1 root root 1146 Apr 26 18:49 ..\n-rwxrwxrwx 1 Adm1n admin 15233 Feb 22 17:08 API.md\ndrwxrwxrwx 1 Adm1n admin 88 Mar 29 15:41 backend\ndrwxrwxrwx 1 Adm1n admin 38 Mar 29 17:07 .claude\n-rwxrwxrwx 1 Adm1n admin 1502 Mar 29 18:01 docker-compose.yml\n-rwxrwxrwx 1 Adm1n admin 1066 Mar 29 15:44 .env\n-rwxrwxrwx 1 Adm1n admin 1078 Feb 14 17:53 .env.example\ndrwxrwxrwx 1 Adm1n admin 194 Mar 29 15:44 frontend\n-rwxrwxrwx 1 Adm1n admin 19 Feb 14 17:54 .gitignore\n-rwxrwxrwx 1 Adm1n admin 4052 Feb 14 19:06 README.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume2/docker/payments-logger/backend -type f | head -30","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume2/docker/payments-logger/backend/Dockerfile\n/volume2/docker/payments-logger/backend/.dockerignore\n/volume2/docker/payments-logger/backend/package.json\n/volume2/docker/payments-logger/backend/prisma/schema.prisma\n/volume2/docker/payments-logger/backend/src/parser.js\n/volume2/docker/payments-logger/backend/src/index.js\n/volume2/docker/payments-logger/backend/src/auth.js\n/volume2/docker/payments-logger/backend/prisma/migrations/migration_lock.toml\n/volume2/docker/payments-logger/backend/src/routes/payments.js\n/volume2/docker/payments-logger/backend/prisma/migrations/20260210_init/migration.sql\n/volume2/docker/payments-logger/backend/prisma/migrations/20260210_simplify/migration.sql\n/volume2/docker/payments-logger/backend/prisma/migrations/20260222_add_card/migration.sql","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume2/docker/payments-logger -type f \\( -name \"*.js\" -o -name \"*.json\" -o -name \"*.md\" \\) | sort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume2/docker/payments-logger/API.md\n/volume2/docker/payments-logger/backend/package.json\n/volume2/docker/payments-logger/backend/src/auth.js\n/volume2/docker/payments-logger/backend/src/index.js\n/volume2/docker/payments-logger/backend/src/parser.js\n/volume2/docker/payments-logger/backend/src/routes/payments.js\n/volume2/docker/payments-logger/.claude/settings.local.json\n/volume2/docker/payments-logger/frontend/package.json\n/volume2/docker/payments-logger/frontend/postcss.config.js\n/volume2/docker/payments-logger/frontend/src/auth.js\n/volume2/docker/payments-logger/frontend/tailwind.config.js\n/volume2/docker/payments-logger/frontend/vite.config.js\n/volume2/docker/payments-logger/README.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"auth.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"auth.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"package.json","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"package.json","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"auth.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"auth.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"API.md","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"API.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"payments.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env.example","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env.example","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"schema.prisma","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"schema.prisma","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"grep -r \"API_KEY\\|auth\\|token\\|oauth\\|hydra\" /volume2/docker/payments-logger/backend/src --include=\"*.js\" -n","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume2/docker/payments-logger/backend/src/index.js:6:const { bearerTokenMiddleware, wellKnownRouter } = require('./auth');\n/volume2/docker/payments-logger/backend/src/index.js:18:// ── OAuth Bearer token auth (skips public paths) ──────────────────────────────\n/volume2/docker/payments-logger/backend/src/auth.js:2: * OAuth 2.1 / Hydra JWT authentication for Express.\n/volume2/docker/payments-logger/backend/src/auth.js:6: * - wellKnownRouter — serves /.well-known/oauth-* discovery endpoints\n/volume2/docker/payments-logger/backend/src/auth.js:33:function sendUnauthorized(res, detail, error = 'invalid_token') {\n/volume2/docker/payments-logger/backend/src/auth.js:39: `resource_metadata=\"${realm}/.well-known/oauth-protected-resource\"`,\n/volume2/docker/payments-logger/backend/src/auth.js:40: `authorization_server=\"${HYDRA_PUBLIC_URL}\"`,\n/volume2/docker/payments-logger/backend/src/auth.js:52: * On success, attaches the decoded payload to req.tokenPayload.\n/volume2/docker/payments-logger/backend/src/auth.js:54: * @param {Set<string>} publicPaths Paths to skip auth for.\n/volume2/docker/payments-logger/backend/src/auth.js:58: '/.well-known/oauth-protected-resource',\n/volume2/docker/payments-logger/backend/src/auth.js:59: '/.well-known/oauth-authorization-server',\n/volume2/docker/payments-logger/backend/src/auth.js:66: const auth = req.headers.authorization || '';\n/volume2/docker/payments-logger/backend/src/auth.js:67: if (!auth.toLowerCase().startsWith('bearer ')) {\n/volume2/docker/payments-logger/backend/src/auth.js:68: return sendUnauthorized(res, 'Bearer token required', 'invalid_request');\n/volume2/docker/payments-logger/backend/src/auth.js:71: const token = auth.slice(7).trim();\n/volume2/docker/payments-logger/backend/src/auth.js:72: if (!token) {\n/volume2/docker/payments-logger/backend/src/auth.js:73: return sendUnauthorized(res, 'Bearer token required', 'invalid_request');\n/volume2/docker/payments-logger/backend/src/auth.js:82: const { payload } = await jwtVerify(token, getJwks(), verifyOptions);\n/volume2/docker/payments-logger/backend/src/auth.js:83: req.tokenPayload = payload;\n/volume2/docker/payments-logger/backend/src/auth.js:87: const error = msg.includes('expired') ? 'invalid_token' : 'invalid_token';\n/volume2/docker/payments-logger/backend/src/auth.js:88: sendUnauthorized(res, msg, error);\n/volume2/docker/payments-logger/backend/src/auth.js:98:wellKnownRouter.get('/.well-known/oauth-protected-resource', (_req, res) => {\n/volume2/docker/payments-logger/backend/src/auth.js:103: authorization_servers: [HYDRA_PUBLIC_URL],\n/volume2/docker/payments-logger/backend/src/auth.js:111:wellKnownRouter.get('/.well-known/oauth-authorization-server', async (_req, res) => {\n/volume2/docker/payments-logger/backend/src/auth.js:119: authorization_endpoint: doc.authorization_endpoint,\n/volume2/docker/payments-logger/backend/src/auth.js:120: token_endpoint: doc.token_endpoint,\n/volume2/docker/payments-logger/backend/src/auth.js:123: grant_types_supported: doc.grant_types_supported || ['authorization_code', 'refresh_token'],\n/volume2/docker/payments-logger/backend/src/auth.js:124: token_endpoint_auth_methods_supported: doc.token_endpoint_auth_methods_supported || ['none', 'client_secret_basic'],\n/volume2/docker/payments-logger/backend/src/auth.js:128: id_token_signing_alg_values_supported: doc.id_token_signing_alg_values_supported || ['RS256'],\n/volume2/docker/payments-logger/backend/src/routes/payments.js:58:// ── Ingest a payment (public — no auth) ──────────────────────────────────────","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume2/docker/payments-logger/frontend/src -type f -name \"*.js\" -o -name \"*.jsx\" -o -name \"*.ts\" -o -name \"*.tsx\" | head -20","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume2/docker/payments-logger/frontend/src/main.jsx\n/volume2/docker/payments-logger/frontend/src/App.jsx\n/volume2/docker/payments-logger/frontend/src/auth.js\n/volume2/docker/payments-logger/frontend/src/components/PaymentCard.jsx\n/volume2/docker/payments-logger/frontend/src/components/PaymentList.jsx\n/volume2/docker/payments-logger/frontend/src/components/FilterBar.jsx\n/volume2/docker/payments-logger/frontend/src/components/PaymentTable.jsx\n/volume2/docker/payments-logger/frontend/src/components/AuthProvider.jsx\n/volume2/docker/payments-logger/frontend/src/components/AuthCallback.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"AuthProvider.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"AuthProvider.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"AuthCallback.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"AuthCallback.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"App.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"App.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"vite.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"vite.config.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"grep -r \"HYDRA\\|VITE\" /volume2/docker/payments-logger --include=\".env*\" -n","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(Bash completed with no output)","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"docker-compose.yml","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"grep -r \"API_KEY\" /volume2/docker/payments-logger/backend --include=\"*.js\" -n","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(Bash completed with no output)","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"README.md","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"README.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"HYDRA\\|oauth\\|TOKEN\" /volume2/docker/payments-logger/backend/src/index.js /volume2/docker/payments-logger/backend/src/auth.js | head -40","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume2/docker/payments-logger/backend/src/auth.js:6: * - wellKnownRouter — serves /.well-known/oauth-* discovery endpoints\n/volume2/docker/payments-logger/backend/src/auth.js:11:const HYDRA_PUBLIC_URL = (process.env.HYDRA_PUBLIC_URL || '').replace(/\\/$/, '');\n/volume2/docker/payments-logger/backend/src/auth.js:24: new URL(`${HYDRA_PUBLIC_URL}/.well-known/jwks.json`)\n/volume2/docker/payments-logger/backend/src/auth.js:39: `resource_metadata=\"${realm}/.well-known/oauth-protected-resource\"`,\n/volume2/docker/payments-logger/backend/src/auth.js:40: `authorization_server=\"${HYDRA_PUBLIC_URL}\"`,\n/volume2/docker/payments-logger/backend/src/auth.js:58: '/.well-known/oauth-protected-resource',\n/volume2/docker/payments-logger/backend/src/auth.js:59: '/.well-known/oauth-authorization-server',\n/volume2/docker/payments-logger/backend/src/auth.js:78: issuer: HYDRA_PUBLIC_URL,\n/volume2/docker/payments-logger/backend/src/auth.js:81: if (process.env.TOKEN_AUDIENCE) verifyOptions.audience = process.env.TOKEN_AUDIENCE;\n/volume2/docker/payments-logger/backend/src/auth.js:98:wellKnownRouter.get('/.well-known/oauth-protected-resource', (_req, res) => {\n/volume2/docker/payments-logger/backend/src/auth.js:103: authorization_servers: [HYDRA_PUBLIC_URL],\n/volume2/docker/payments-logger/backend/src/auth.js:107: jwks_uri: `${HYDRA_PUBLIC_URL}/.well-known/jwks.json`,\n/volume2/docker/payments-logger/backend/src/auth.js:111:wellKnownRouter.get('/.well-known/oauth-authorization-server', async (_req, res) => {\n/volume2/docker/payments-logger/backend/src/auth.js:113: const r = await fetch(`${HYDRA_PUBLIC_URL}/.well-known/openid-configuration`);\n/volume2/docker/payments-logger/backend/src/auth.js:118: issuer: doc.issuer || HYDRA_PUBLIC_URL,","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"payments-logger Authorization Overview","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"payments-logger Authorization Overview","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"The project uses","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"OAuth 2.1 with PKCE","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"via an external Hydra OAuth server at","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"hydra.lakylak.xyz","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Auth Flow","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Auth Flow","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Frontend","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"frontend/src/auth.js","depth":23,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"frontend/src/auth.js","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"):","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetches OAuth server metadata via discovery endpoint","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Generates a PKCE code verifier/challenge (SHA-256)","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Redirects user to Hydra login with","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"code_challenge","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"On callback, exchanges code + verifier for tokens","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stores","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"access_token","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"refresh_token","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"in","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"localStorage","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pl_oauth_tokens","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":")","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Auto-refreshes token 30 seconds before expiry","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Backend","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"backend/src/auth.js","depth":23,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"backend/src/auth.js","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"):","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"bearerTokenMiddleware","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"validates the","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Authorization: Bearer <token>","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"header","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Fetches Hydra's JWKS (cached 300s) and verifies JWT signature (RS256/ES256/PS256)","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Validates issuer (","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"https://hydra.lakylak.xyz","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":") and optional audience","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Enforcement","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Enforcement","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Applied globally in","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"backend/src/index.js:19","depth":23,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"backend/src/index.js:19","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"with these","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"public (unprotected) paths","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":":","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/.well-known/oauth-protected-resource","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/.well-known/oauth-authorization-server","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/api/health","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/api/payments/ingest","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(rate-limited at 200 req/min — for SMS ingestion)","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Roles/Permissions","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Roles/Permissions","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"No RBAC","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— it's binary: authenticated vs. unauthenticated. Required scopes:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"openid","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"offline_access","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Key Security Notes","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Key Security Notes","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PKCE","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"prevents authorization code interception","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"State parameter","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"provides CSRF protection","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"No server-side token storage","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— validation is stateless via JWKS","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"The README/API docs mention an","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"X-API-Key","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"header, but that's","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"outdated","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— the actual code uses Bearer tokens only","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Config lives in","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"docker-compose.yml","depth":23,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(lines 30–33):","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HYDRA_PUBLIC_URL","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"REQUIRED_SCOPES","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"OAUTH_CLIENT_ID","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":", and optionally","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TOKEN_AUDIENCE","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JWKS_CACHE_TTL","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":24,"bounds":{"left":0.9900266,"top":0.11173184,"width":0.0066489363,"height":0.015961692},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"compare it to location logger and make it the same. Lets remove hydra and only use authentic (or whatever location logger uses).","depth":25,"bounds":{"left":0.5671542,"top":0.12529927,"width":0.25930852,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me first explore how location-logger handles authorization.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore location-logger authorization code","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the location-logger project at /volume2/docker/location-logger and give me a thorough understanding of how authorization works. I need to know:\n\n1. What auth mechanism is used (JWT, sessions, API keys, OAuth, etc.)\n2. Where auth is enforced (middleware, decorators, route guards, etc.)\n3. What roles/permissions exist\n4. How tokens are issued, validated, and refreshed\n5. Any auth-related config (env vars, settings)\n6. Frontend auth flow (how the user logs in, how tokens are stored and used)\n7. The full directory/file structure of the project\n\nPlease read ALL relevant source files completely and give me a detailed summary with file paths and line numbers. I need enough detail to replicate this auth system in another project.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume2/docker/location-logger -type f -name \"*.py\" -o -name \"*.js\" -o -name \"*.ts\" -o -name \"*.json\" | head -50","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume2/docker/location-logger/.mcp.json\n/volume2/docker/location-logger/app/__init__.py\n/volume2/docker/location-logger/app/utils.py\n/volume2/docker/location-logger/app/config.py\n/volume2/docker/location-logger/app/main.py\n/volume2/docker/location-logger/alembic/env.py\n/volume2/docker/location-logger/mcp-server/server.py\n/volume2/docker/location-logger/alembic/versions/20260203_201500_create_location_points_table.py\n/volume2/docker/location-logger/alembic/versions/20260209_200000_add_enhanced_fields_and_tables.py\n/volume2/docker/location-logger/alembic/versions/20260214_000000_add_users_and_audit_logs.py\n/volume2/docker/location-logger/alembic/versions/20260320_000000_add_audit_query_string.py\n/volume2/docker/location-logger/app/services/geofence_service.py\n/volume2/docker/location-logger/app/services/recorder_service.py\n/volume2/docker/location-logger/app/services/trip_service.py\n/volume2/docker/location-logger/app/services/enhanced_location_service.py\n/volume2/docker/location-logger/app/services/geocoding_service.py\n/volume2/docker/location-logger/app/clients/__init__.py\n/volume2/docker/location-logger/app/clients/dawarich_client.py\n/volume2/docker/location-logger/app/clients/owntracks_client.py\n/volume2/docker/location-logger/app/models/areas.py\n/volume2/docker/location-logger/app/models/geofence_events.py\n/volume2/docker/location-logger/app/models/trips.py\n/volume2/docker/location-logger/app/models/user.py\n/volume2/docker/location-logger/app/models/location.py\n/volume2/docker/location-logger/app/models/audit_log.py\n/volume2/docker/location-logger/app/auth/__init__.py\n/volume2/docker/location-logger/app/auth/dependencies.py\n/volume2/docker/location-logger/app/auth/utils.py\n/volume2/docker/location-logger/app/api/enhanced_endpoints.py\n/volume2/docker/location-logger/app/db/base.py\n/volume2/docker/location-logger/app/db/session.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"tree -L 4 /volume2/docker/location-logger 2>/dev/null || find /volume2/docker/location-logger -type d | sort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume2/docker/location-logger\n├── alembic\n│ ├── env.py\n│ ├── script.py.mako\n│ └── versions\n│ ├── 20260203_201500_create_location_points_table.py\n│ ├── 20260209_200000_add_enhanced_fields_and_tables.py\n│ ├── 20260214_000000_add_users_and_audit_logs.py\n│ ├── 20260320_000000_add_audit_query_string.py\n│ └── __pycache__\n│ └── 20260214_000000_add_users_and_audit_logs.cpython-311.pyc\n├── alembic.ini\n├── app\n│ ├── api\n│ │ └── enhanced_endpoints.py\n│ ├── auth\n│ │ ├── dependencies.py\n│ │ ├── __init__.py\n│ │ ├── __pycache__\n│ │ │ ├── dependencies.cpython-311.pyc\n│ │ │ ├── __init__.cpython-311.pyc\n│ │ │ └── utils.cpython-311.pyc\n│ │ └── utils.py\n│ ├── clients\n│ │ ├── dawarich_client.py\n│ │ ├── __init__.py\n│ │ └── owntracks_client.py\n│ ├── config.py\n│ ├── db\n│ │ ├── base.py\n│ │ └── session.py\n│ ├── __init__.py\n│ ├── main.py\n│ ├── models\n│ │ ├── areas.py\n│ │ ├── audit_log.py\n│ │ ├── geofence_events.py\n│ │ ├── location.py\n│ │ ├── __pycache__\n│ │ │ ├── audit_log.cpython-311.pyc\n│ │ │ └── user.cpython-311.pyc\n│ │ ├── trips.py\n│ │ └── user.py\n│ ├── __pycache__\n│ │ ├── __init__.cpython-311.pyc\n│ │ └── main.cpython-311.pyc\n│ ├── services\n│ │ ├── enhanced_location_service.py\n│ │ ├── geocoding_service.py\n│ │ ├── geofence_service.py\n│ │ ├── recorder_service.py\n│ │ └── trip_service.py\n│ ├── static\n│ │ └── dashboard.html\n│ └── utils.py\n├── docker-compose.yml\n├── Dockerfile\n├── mcp-server\n│ ├── Dockerfile\n│ ├── requirements.txt\n│ └── server.py\n├── README.md\n├── requirements.txt\n└── today_map.html\n\n16 directories, 48 files","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"utils.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"utils.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"dependencies.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"dependencies.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"user.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"user.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"config.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"config.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"session.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"session.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"dashboard.html","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"dashboard.html","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.114924185,"width":0.011968086,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"audit_log.py","depth":24,"bounds":{"left":0.5880984,"top":0.11652035,"width":0.026595745,"height":0.0103751},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"audit_log.py","depth":25,"bounds":{"left":0.5880984,"top":0.11652035,"width":0.026595745,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.14285715,"width":0.011968086,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"20260214_000000_add_users_and_audit_logs.py","depth":24,"bounds":{"left":0.5880984,"top":0.14445332,"width":0.09507979,"height":0.011173184},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"20260214_000000_add_users_and_audit_logs.py","depth":25,"bounds":{"left":0.5880984,"top":0.14445332,"width":0.09507979,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.17158818,"width":0.011968086,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"20260320_000000_add_audit_query_string.py","depth":24,"bounds":{"left":0.5880984,"top":0.17318435,"width":0.09075798,"height":0.0103751},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"20260320_000000_add_audit_query_string.py","depth":25,"bounds":{"left":0.5880984,"top":0.17318435,"width":0.09075798,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.19952115,"width":0.011968086,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"README.md","depth":24,"bounds":{"left":0.5880984,"top":0.20111732,"width":0.019946808,"height":0.011173184},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"README.md","depth":25,"bounds":{"left":0.5880984,"top":0.20111732,"width":0.019946808,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.22825219,"width":0.011968086,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":24,"bounds":{"left":0.5880984,"top":0.22984837,"width":0.03557181,"height":0.0103751},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":25,"bounds":{"left":0.5880984,"top":0.22984837,"width":0.03557181,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.25618514,"width":0.011968086,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"server.py","depth":24,"bounds":{"left":0.5880984,"top":0.25778133,"width":0.019946808,"height":0.011173184},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"server.py","depth":25,"bounds":{"left":0.5880984,"top":0.25778133,"width":0.019946808,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.2849162,"width":0.011968086,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"server.py","depth":24,"bounds":{"left":0.5880984,"top":0.28651237,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"server.py","depth":25,"bounds":{"left":0.5880984,"top":0.28651237,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"(lines 101-400)","depth":24,"bounds":{"left":0.6080452,"top":0.2849162,"width":0.031914894,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"bounds":{"left":0.57480055,"top":0.31284916,"width":0.023936171,"height":0.015961692},"on_screen":true,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"bounds":{"left":0.57480055,"top":0.31444532,"width":0.017287234,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Now I have a full picture of both systems. Let me read the payments-logger source files before planning the migration.","depth":23,"bounds":{"left":0.57480055,"top":0.3423783,"width":0.23769946,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"bounds":{"left":0.57480055,"top":0.37270552,"width":0.011968086,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"List all payments-logger files","depth":24,"bounds":{"left":0.58776593,"top":0.37270552,"width":0.05851064,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"bounds":{"left":0.5777925,"top":0.40143654,"width":0.0043218085,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"find /volume2/docker/payments-logger -type f | grep -v node_modules | grep -v .git | sort","depth":25,"bounds":{"left":0.5880984,"top":0.40143654,"width":0.19714096,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"bounds":{"left":0.9840425,"top":0.39664805,"width":0.007978723,"height":0.019952115},"on_screen":true,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"bounds":{"left":0.5777925,"top":0.42777336,"width":0.0066489363,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"/volume2/docker/payments-logger/API.md\n/volume2/docker/payments-logger/backend/Dockerfile\n/volume2/docker/payments-logger/backend/.dockerignore\n/volume2/docker/payments-logger/backend/package.json\n/volume2/docker/payments-logger/backend/prisma/migrations/20260210_init/migration.sql\n/volume2/docker/payments-logger/backend/prisma/migrations/20260210_simplify/migration.sql\n/volume2/docker/payments-logger/backend/prisma/migrations/20260222_add_card/migration.sql\n/volume2/docker/payments-logger/backend/prisma/migrations/migration_lock.toml\n/volume2/docker/payments-logger/backend/prisma/schema.prisma\n/volume2/docker/payments-logger/backend/src/auth.js\n/volume2/docker/payments-logger/backend/src/index.js\n/volume2/docker/payments-logger/backend/src/parser.js\n/volume2/docker/payments-logger/backend/src/routes/payments.js\n/volume2/docker/payments-logger/.claude/settings.local.json\n/volume2/docker/payments-logger/docker-compose.yml\n/volume2/docker/payments-logger/.env\n/volume2/docker/payments-logger/.env.example\n/volume2/docker/payments-logger/frontend/Dockerfile\n/volume2/docker/payments-logger/frontend/.dockerignore\n/volume2/docker/payments-logger/frontend/index.html\n/volume2/docker/payments-logger/frontend/package.json\n/volume2/docker/payments-logger/frontend/postcss.config.js\n/volume2/docker/payments-logger/frontend/src/App.jsx\n/volume2/docker/payments-logger/frontend/src/auth.js\n/volume2/docker/payments-logger/frontend/src/components/AuthCallback.jsx\n/volume2/docker/payments-logger/frontend/src/components/AuthProvider.jsx\n/volume2/docker/payments-logger/frontend/src/components/FilterBar.jsx\n/volume2/docker/payments-logger/frontend/src/components/PaymentCard.jsx\n/volume2/docker/payments-logger/frontend/src/components/PaymentList.jsx\n/volume2/docker/payments-logger/frontend/src/components/PaymentTable.jsx\n/volume2/docker/payments-logger/frontend/src/index.css\n/volume2/docker/payments-logger/frontend/src/main.jsx\n/volume2/docker/payments-logger/frontend/tailwind.config.js\n/volume2/docker/payments-logger/frontend/vite.config.js\n/volume2/docker/payments-logger/README.md","depth":25,"bounds":{"left":0.5880984,"top":0.42777336,"width":0.19714096,"height":0.05027933},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.5019952,"width":0.011968086,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"auth.js","depth":24,"bounds":{"left":0.5880984,"top":0.50359136,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"auth.js","depth":25,"bounds":{"left":0.5880984,"top":0.50359136,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.52992815,"width":0.011968086,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"index.js","depth":24,"bounds":{"left":0.5880984,"top":0.53152436,"width":0.01761968,"height":0.011173184},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.js","depth":25,"bounds":{"left":0.5880984,"top":0.53152436,"width":0.01761968,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.5586592,"width":0.011968086,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"auth.js","depth":24,"bounds":{"left":0.5880984,"top":0.5602554,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"auth.js","depth":25,"bounds":{"left":0.5880984,"top":0.5602554,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.5865922,"width":0.011968086,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"AuthProvider.jsx","depth":24,"bounds":{"left":0.5880984,"top":0.58818835,"width":0.03557181,"height":0.011173184},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"AuthProvider.jsx","depth":25,"bounds":{"left":0.5880984,"top":0.58818835,"width":0.03557181,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.61532325,"width":0.011968086,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"package.json","depth":24,"bounds":{"left":0.5880984,"top":0.6169194,"width":0.026595745,"height":0.0103751},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"package.json","depth":25,"bounds":{"left":0.5880984,"top":0.6169194,"width":0.026595745,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.6432562,"width":0.011968086,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"AuthCallback.jsx","depth":24,"bounds":{"left":0.5880984,"top":0.64485234,"width":0.03557181,"height":0.011173184},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"AuthCallback.jsx","depth":25,"bounds":{"left":0.5880984,"top":0.64485234,"width":0.03557181,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.67198724,"width":0.011968086,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"schema.prisma","depth":24,"bounds":{"left":0.5880984,"top":0.6735834,"width":0.028922873,"height":0.0103751},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"schema.prisma","depth":25,"bounds":{"left":0.5880984,"top":0.6735834,"width":0.028922873,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.6999202,"width":0.011968086,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"docker-compose.yml","depth":24,"bounds":{"left":0.5880984,"top":0.7015164,"width":0.039893616,"height":0.011173184},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":25,"bounds":{"left":0.5880984,"top":0.7015164,"width":0.039893616,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"bounds":{"left":0.57480055,"top":0.7278532,"width":0.023936171,"height":0.015961692},"on_screen":true,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"bounds":{"left":0.57480055,"top":0.72944933,"width":0.017287234,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Now let me read the remaining frontend files.","depth":23,"bounds":{"left":0.57480055,"top":0.7581804,"width":0.09075798,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.7885076,"width":0.011968086,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"App.jsx","depth":24,"bounds":{"left":0.5880984,"top":0.79010373,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"App.jsx","depth":25,"bounds":{"left":0.5880984,"top":0.79010373,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.8164405,"width":0.011968086,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"package.json","depth":24,"bounds":{"left":0.5880984,"top":0.81803674,"width":0.026595745,"height":0.011173184},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"package.json","depth":25,"bounds":{"left":0.5880984,"top":0.81803674,"width":0.026595745,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"bounds":{"left":0.57480055,"top":0.8451716,"width":0.011968086,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":".env","depth":24,"bounds":{"left":0.5880984,"top":0.8467678,"width":0.008976064,"height":0.0103751},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env","depth":25,"bounds":{"left":0.5880984,"top":0.8467678,"width":0.008976064,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"*","depth":22,"bounds":{"left":0.5671542,"top":0.8707103,"width":0.0033244682,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Working...","depth":22,"bounds":{"left":0.57413566,"top":0.87230647,"width":0.021276595,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Queue another message…","depth":24,"bounds":{"left":0.6665558,"top":0.9082203,"width":0.22539894,"height":0.0311253},"on_screen":true,"value":"Queue another message…","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Queue another message…","depth":26,"bounds":{"left":0.6712101,"top":0.91779727,"width":0.052526597,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Add","depth":24,"bounds":{"left":0.6682181,"top":0.94413406,"width":0.008643617,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show command menu (/)","depth":23,"bounds":{"left":0.6775266,"top":0.94413406,"width":0.008643617,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"docker-compose.yml","depth":23,"bounds":{"left":0.69049203,"top":0.94413406,"width":0.047872342,"height":0.0207502},"on_screen":true,"help_text":"Showing Claude your current file selection (docker-compose.yml)","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":24,"bounds":{"left":0.69913566,"top":0.9489226,"width":0.03656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Edit automatically","depth":24,"bounds":{"left":0.83776593,"top":0.94413406,"width":0.04255319,"height":0.0207502},"on_screen":true,"help_text":"Claude will edit your selected text or the whole file. Click to change, or press Shift+Tab to cycle.","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Edit automatically","depth":25,"bounds":{"left":0.84640956,"top":0.9489226,"width":0.03125,"height":0.0103751},"on_screen":true,"role_description":"text"}]...
|
8664720055207031665
|
-5457875329104358839
|
idle
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 55 pending changes
55
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: docker [SSH: nas]
Explorer Section: docker [SSH: nas]
DOCKER [SSH: NAS]
dawarich
dsk-uploader
flask-app
garmin-connector
gitea
health
health-tracker
homarr
hst
immich
jellyfinht
kavita
libreoffice
linkwarden
location-logger
alembic
app
mcp-server
.env
.env.example
.gitignore
.mcp.json
M
alembic.ini
docker-compose.yml
M
Dockerfile
README.md
M
requirements.txt
M
today_map.html
mariadb
meeting-detector
mindfulmama
n8n
notifier-app
npm
oauth
obsidian
ollama
open-webui
openttd
openvpn-client
orchestrator
outfit-app
owntracks-stack
paperlessngx
payments-logger
.claude
backend
frontend
.env
.env.example
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
docker-compose.yml, Editor Group 1
Review payment logger au…, Editor Group 2
remote SSH: nas
SSH: nas
location-logger (Git)
location-logger
location-logger (Git) - main*, Checkout Branch/Tag...
main*
location-logger (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
expanded
Clear
Review payment logger authorization implementation
Session history
New session
Message actions
review payment_logger project how toes authorization work
Thinking
Thinking
Let me explore the payment_logger project structure first.
Bash
Find payment_logger project files
IN
find /volume2/docker -type f -name "*.py" -o -name "*.yml" -o -name "*.yaml" -o -name "*.env" -o -name "*.toml" -o -name "*.cfg" | grep -i payment | head -50
Copy code to clipboard
OUT
bfs: error: /volume2/docker/portnotedb/pg_commit_ts: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_dynshmem: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_notify: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_serial: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_snapshots: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_subtrans: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_twophase: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_multixact: Permission denied.
bfs: error: /volume2/docker/portnotedb/base: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_replslot: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_tblspc: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_stat: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_stat_tmp: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_xact: Permission denied.
bfs: error: /volume2/docker/portnotedb/pg_logical: Permission denied.
bfs: error: /volume2/docker/openttd/.dbus: Permission denied.
bfs: error: /volume2/docker/immich/db: Permission denied.
bfs: error: /volume2/docker/paperlessngx/db: Permission denied.
bfs: error: /volume2/docker/appflowy/postgres: Permission denied.
bfs: error: /volume2/docker/auth/db: Permission denied.
bfs: error: /volume2/docker/openttd/.XDG/dbus-1: Permission denied.
bfs: error: /volume2/docker/openttd/.config/pulse: Permission denied.
bfs: error: /volume2/docker/openttd/.cache/openbox/sessions: Permission denied.
/volume2/docker/payments-logger/.env
/volume2/docker/payments-logger/docker-compose.yml
/volume2/docker/payments-logger/backend/prisma/migrations/migration_lock.toml
Bash
List docker directory contents
IN
ls /volume2/docker/
Copy code to clipboard
OUT
adguard
ai-stack
app-db
appflowy
audiobookshelf
auth
beszel
bitwarden
dawarich
dsk-uploader
flask-app
garmin-connector
gitea
health
health-tracker
homarr
hst
immich
jellyfinht
kavita
libreoffice
linkwarden
location-logger
mariadb
meeting-detector
mindfulmama
n8n
notifier-app
npm
oauth
obsidian
ollama
openttd
openvpn-client
open-webui
orchestrator
outfit-app
owntracks-stack
paperlessngx
payments-logger
personal-log
personal-log-system
player
portainer
portnotedb
reminders-app
romm
second-brain
static
stirling
syncthing
tailscale
temp-logger
test-app
tmp
torrent-stack
tree
trilium
tubearchivist
twenty
uptimekuma
ytptube
Agent:
Explore payment_logger authorization code
IN
Explore the payments-logger project at /volume2/docker/payments-logger and give me a thorough understanding of how authorization works. I need to know:
1. What auth mechanism is used (JWT, sessions, API keys, OAuth, etc.)
2. Where auth is enforced (middleware, decorators, route guards, etc.)
3. What roles/permissions exist
4. How tokens are issued, validated, and refreshed
5. Any auth-related config (env vars, settings)
Please read the key source files and give me a clear summary with file paths and line numbers for the important parts.
Bash
IN
find /volume2/docker/payments-logger -type f -name "*.py" -o -name "*.json" -o -name "*.yml" -o -name "*.yaml" | grep -E "(auth|token|jwt|session|permission|role)" | head -20
Copy code to clipboard
OUT
(Bash completed with no output)
Bash
IN
ls -la /volume2/docker/payments-logger/ 2>/dev/null || echo "Directory not found"
Copy code to clipboard
OUT
total 36
drwxrwxrwx 1 Adm1n admin 162 Mar 29 18:01 .
drwxrwxrwx 1 root root 1146 Apr 26 18:49 ..
-rwxrwxrwx 1 Adm1n admin 15233 Feb 22 17:08 API.md
drwxrwxrwx 1 Adm1n admin 88 Mar 29 15:41 backend
drwxrwxrwx 1 Adm1n admin 38 Mar 29 17:07 .claude
-rwxrwxrwx 1 Adm1n admin 1502 Mar 29 18:01 docker-compose.yml
-rwxrwxrwx 1 Adm1n admin 1066 Mar 29 15:44 .env
-rwxrwxrwx 1 Adm1n admin 1078 Feb 14 17:53 .env.example
drwxrwxrwx 1 Adm1n admin 194 Mar 29 15:44 frontend
-rwxrwxrwx 1 Adm1n admin 19 Feb 14 17:54 .gitignore
-rwxrwxrwx 1 Adm1n admin 4052 Feb 14 19:06 README.md
Bash
IN
find /volume2/docker/payments-logger/backend -type f | head -30
Copy code to clipboard
OUT
/volume2/docker/payments-logger/backend/Dockerfile
/volume2/docker/payments-logger/backend/.dockerignore
/volume2/docker/payments-logger/backend/package.json
/volume2/docker/payments-logger/backend/prisma/schema.prisma
/volume2/docker/payments-logger/backend/src/parser.js
/volume2/docker/payments-logger/backend/src/index.js
/volume2/docker/payments-logger/backend/src/auth.js
/volume2/docker/payments-logger/backend/prisma/migrations/migration_lock.toml
/volume2/docker/payments-logger/backend/src/routes/payments.js
/volume2/docker/payments-logger/backend/prisma/migrations/20260210_init/migration.sql
/volume2/docker/payments-logger/backend/prisma/migrations/20260210_simplify/migration.sql
/volume2/docker/payments-logger/backend/prisma/migrations/20260222_add_card/migration.sql
Bash
IN
find /volume2/docker/payments-logger -type f \( -name "*.js" -o -name "*.json" -o -name "*.md" \) | sort
Copy code to clipboard
OUT
/volume2/docker/payments-logger/API.md
/volume2/docker/payments-logger/backend/package.json
/volume2/docker/payments-logger/backend/src/auth.js
/volume2/docker/payments-logger/backend/src/index.js
/volume2/docker/payments-logger/backend/src/parser.js
/volume2/docker/payments-logger/backend/src/routes/payments.js
/volume2/docker/payments-logger/.claude/settings.local.json
/volume2/docker/payments-logger/frontend/package.json
/volume2/docker/payments-logger/frontend/postcss.config.js
/volume2/docker/payments-logger/frontend/src/auth.js
/volume2/docker/payments-logger/frontend/tailwind.config.js
/volume2/docker/payments-logger/frontend/vite.config.js
/volume2/docker/payments-logger/README.md
Read
.env
.env
Read
auth.js
auth.js
Read
index.js
index.js
Read
package.json
package.json
Read
auth.js
auth.js
Read
API.md
API.md
Read
payments.js
payments.js
Read
.env.example
.env.example
Read
schema.prisma
schema.prisma
Bash
IN
grep -r "API_KEY\|auth\|token\|oauth\|hydra" /volume2/docker/payments-logger/backend/src --include="*.js" -n
Copy code to clipboard
OUT
/volume2/docker/payments-logger/backend/src/index.js:6:const { bearerTokenMiddleware, wellKnownRouter } = require('./auth');
/volume2/docker/payments-logger/backend/src/index.js:18:// ── OAuth Bearer token auth (skips public paths) ──────────────────────────────
/volume2/docker/payments-logger/backend/src/auth.js:2: * OAuth 2.1 / Hydra JWT authentication for Express.
/volume2/docker/payments-logger/backend/src/auth.js:6: * - wellKnownRouter — serves /.well-known/oauth-* discovery endpoints
/volume2/docker/payments-logger/backend/src/auth.js:33:function sendUnauthorized(res, detail, error = 'invalid_token') {
/volume2/docker/payments-logger/backend/src/auth.js:39: `resource_metadata="${realm}/.well-known/oauth-protected-resource"`,
/volume2/docker/payments-logger/backend/src/auth.js:40: `authorization_server="${HYDRA_PUBLIC_URL}"`,
/volume2/docker/payments-logger/backend/src/auth.js:52: * On success, attaches the decoded payload to req.tokenPayload.
/volume2/docker/payments-logger/backend/src/auth.js:54: * @param {Set<string>} publicPaths Paths to skip auth for.
/volume2/docker/payments-logger/backend/src/auth.js:58: '/.well-known/oauth-protected-resource',
/volume2/docker/payments-logger/backend/src/auth.js:59: '/.well-known/oauth-authorization-server',
/volume2/docker/payments-logger/backend/src/auth.js:66: const auth = req.headers.authorization || '';
/volume2/docker/payments-logger/backend/src/auth.js:67: if (!auth.toLowerCase().startsWith('bearer ')) {
/volume2/docker/payments-logger/backend/src/auth.js:68: return sendUnauthorized(res, 'Bearer token required', 'invalid_request');
/volume2/docker/payments-logger/backend/src/auth.js:71: const token = auth.slice(7).trim();
/volume2/docker/payments-logger/backend/src/auth.js:72: if (!token) {
/volume2/docker/payments-logger/backend/src/auth.js:73: return sendUnauthorized(res, 'Bearer token required', 'invalid_request');
/volume2/docker/payments-logger/backend/src/auth.js:82: const { payload } = await jwtVerify(token, getJwks(), verifyOptions);
/volume2/docker/payments-logger/backend/src/auth.js:83: req.tokenPayload = payload;
/volume2/docker/payments-logger/backend/src/auth.js:87: const error = msg.includes('expired') ? 'invalid_token' : 'invalid_token';
/volume2/docker/payments-logger/backend/src/auth.js:88: sendUnauthorized(res, msg, error);
/volume2/docker/payments-logger/backend/src/auth.js:98:wellKnownRouter.get('/.well-known/oauth-protected-resource', (_req, res) => {
/volume2/docker/payments-logger/backend/src/auth.js:103: authorization_servers: [HYDRA_PUBLIC_URL],
/volume2/docker/payments-logger/backend/src/auth.js:111:wellKnownRouter.get('/.well-known/oauth-authorization-server', async (_req, res) => {
/volume2/docker/payments-logger/backend/src/auth.js:119: authorization_endpoint: doc.authorization_endpoint,
/volume2/docker/payments-logger/backend/src/auth.js:120: token_endpoint: doc.token_endpoint,
/volume2/docker/payments-logger/backend/src/auth.js:123: grant_types_supported: doc.grant_types_supported || ['authorization_code', 'refresh_token'],
/volume2/docker/payments-logger/backend/src/auth.js:124: [API_KEY]: doc.[API_KEY] || ['none', 'client_secret_basic'],
/volume2/docker/payments-logger/backend/src/auth.js:128: id_token_signing_alg_values_supported: doc.id_token_signing_alg_values_supported || ['RS256'],
/volume2/docker/payments-logger/backend/src/routes/payments.js:58:// ── Ingest a payment (public — no auth) ──────────────────────────────────────
Bash
IN
find /volume2/docker/payments-logger/frontend/src -type f -name "*.js" -o -name "*.jsx" -o -name "*.ts" -o -name "*.tsx" | head -20
Copy code to clipboard
OUT
/volume2/docker/payments-logger/frontend/src/main.jsx
/volume2/docker/payments-logger/frontend/src/App.jsx
/volume2/docker/payments-logger/frontend/src/auth.js
/volume2/docker/payments-logger/frontend/src/components/PaymentCard.jsx
/volume2/docker/payments-logger/frontend/src/components/PaymentList.jsx
/volume2/docker/payments-logger/frontend/src/components/FilterBar.jsx
/volume2/docker/payments-logger/frontend/src/components/PaymentTable.jsx
/volume2/docker/payments-logger/frontend/src/components/AuthProvider.jsx
/volume2/docker/payments-logger/frontend/src/components/AuthCallback.jsx
Read
AuthProvider.jsx
AuthProvider.jsx
Read
AuthCallback.jsx
AuthCallback.jsx
Read
App.jsx
App.jsx
Read
main.jsx
main.jsx
Read
vite.config.js
vite.config.js
Bash
IN
grep -r "HYDRA\|VITE" /volume2/docker/payments-logger --include=".env*" -n
Copy code to clipboard
OUT
(Bash completed with no output)
Read
docker-compose.yml
docker-compose.yml
Bash
IN
grep -r "API_KEY" /volume2/docker/payments-logger/backend --include="*.js" -n
Copy code to clipboard
OUT
(Bash completed with no output)
Read
README.md
README.md
Bash
IN
grep -n "HYDRA\|oauth\|TOKEN" /volume2/docker/payments-logger/backend/src/index.js /volume2/docker/payments-logger/backend/src/auth.js | head -40
Copy code to clipboard
OUT
/volume2/docker/payments-logger/backend/src/auth.js:6: * - wellKnownRouter — serves /.well-known/oauth-* discovery endpoints
/volume2/docker/payments-logger/backend/src/auth.js:11:const HYDRA_PUBLIC_URL = (process.env.HYDRA_PUBLIC_URL || '').replace(/\/$/, '');
/volume2/docker/payments-logger/backend/src/auth.js:24: new URL(`${HYDRA_PUBLIC_URL}/.well-known/jwks.json`)
/volume2/docker/payments-logger/backend/src/auth.js:39: `resource_metadata="${realm}/.well-known/oauth-protected-resource"`,
/volume2/docker/payments-logger/backend/src/auth.js:40: `authorization_server="${HYDRA_PUBLIC_URL}"`,
/volume2/docker/payments-logger/backend/src/auth.js:58: '/.well-known/oauth-protected-resource',
/volume2/docker/payments-logger/backend/src/auth.js:59: '/.well-known/oauth-authorization-server',
/volume2/docker/payments-logger/backend/src/auth.js:78: issuer: HYDRA_PUBLIC_URL,
/volume2/docker/payments-logger/backend/src/auth.js:81: if (process.env.TOKEN_AUDIENCE) verifyOptions.audience = process.env.TOKEN_AUDIENCE;
/volume2/docker/payments-logger/backend/src/auth.js:98:wellKnownRouter.get('/.well-known/oauth-protected-resource', (_req, res) => {
/volume2/docker/payments-logger/backend/src/auth.js:103: authorization_servers: [HYDRA_PUBLIC_URL],
/volume2/docker/payments-logger/backend/src/auth.js:107: jwks_uri: `${HYDRA_PUBLIC_URL}/.well-known/jwks.json`,
/volume2/docker/payments-logger/backend/src/auth.js:111:wellKnownRouter.get('/.well-known/oauth-authorization-server', async (_req, res) => {
/volume2/docker/payments-logger/backend/src/auth.js:113: const r = await fetch(`${HYDRA_PUBLIC_URL}/.well-known/openid-configuration`);
/volume2/docker/payments-logger/backend/src/auth.js:118: issuer: doc.issuer || HYDRA_PUBLIC_URL,
Thinking
Thinking
payments-logger Authorization Overview
payments-logger Authorization Overview
The project uses
OAuth 2.1 with PKCE
via an external Hydra OAuth server at
hydra.lakylak.xyz
.
Auth Flow
Auth Flow
Frontend
(
frontend/src/auth.js
frontend/src/auth.js
):
Fetches OAuth server metadata via discovery endpoint
Generates a PKCE code verifier/challenge (SHA-256)
Redirects user to Hydra login with
code_challenge
On callback, exchanges code + verifier for tokens
Stores
access_token
,
refresh_token
in
localStorage
(
pl_oauth_tokens
)
Auto-refreshes token 30 seconds before expiry
Backend
(
backend/src/auth.js
backend/src/auth.js
):
bearerTokenMiddleware
validates the
Authorization: Bearer <token>
header
Fetches Hydra's JWKS (cached 300s) and verifies JWT signature (RS256/ES256/PS256)
Validates issuer (
https://hydra.lakylak.xyz
) and optional audience
Enforcement
Enforcement
Applied globally in
backend/src/index.js:19
backend/src/index.js:19
with these
public (unprotected) paths
:
/.well-known/oauth-protected-resource
/.well-known/oauth-authorization-server
/api/health
/api/payments/ingest
(rate-limited at 200 req/min — for SMS ingestion)
Roles/Permissions
Roles/Permissions
No RBAC
— it's binary: authenticated vs. unauthenticated. Required scopes:
openid
,
offline_access
.
Key Security Notes
Key Security Notes
PKCE
prevents authorization code interception
State parameter
provides CSRF protection
No server-side token storage
— validation is stateless via JWKS
The README/API docs mention an
X-API-Key
header, but that's
outdated
— the actual code uses Bearer tokens only
Config lives in
docker-compose.yml
docker-compose.yml
(lines 30–33):
HYDRA_PUBLIC_URL
,
REQUIRED_SCOPES
,
OAUTH_CLIENT_ID
, and optionally
TOKEN_AUDIENCE
/
JWKS_CACHE_TTL
.
Message actions
compare it to location logger and make it the same. Lets remove hydra and only use authentic (or whatever location logger uses).
Thinking
Thinking
Let me first explore how location-logger handles authorization.
Agent:
Explore location-logger authorization code
IN
Explore the location-logger project at /volume2/docker/location-logger and give me a thorough understanding of how authorization works. I need to know:
1. What auth mechanism is used (JWT, sessions, API keys, OAuth, etc.)
2. Where auth is enforced (middleware, decorators, route guards, etc.)
3. What roles/permissions exist
4. How tokens are issued, validated, and refreshed
5. Any auth-related config (env vars, settings)
6. Frontend auth flow (how the user logs in, how tokens are stored and used)
7. The full directory/file structure of the project
Please read ALL relevant source files completely and give me a detailed summary with file paths and line numbers. I need enough detail to replicate this auth system in another project.
Bash
IN
find /volume2/docker/location-logger -type f -name "*.py" -o -name "*.js" -o -name "*.ts" -o -name "*.json" | head -50
Copy code to clipboard
OUT
/volume2/docker/location-logger/.mcp.json
/volume2/docker/location-logger/app/__init__.py
/volume2/docker/location-logger/app/utils.py
/volume2/docker/location-logger/app/config.py
/volume2/docker/location-logger/app/main.py
/volume2/docker/location-logger/alembic/env.py
/volume2/docker/location-logger/mcp-server/server.py
/volume2/docker/location-logger/alembic/versions/20260203_201500_create_location_points_table.py
/volume2/docker/location-logger/alembic/versions/20260209_200000_add_enhanced_fields_and_tables.py
/volume2/docker/location-logger/alembic/versions/20260214_000000_add_users_and_audit_logs.py
/volume2/docker/location-logger/alembic/versions/20260320_000000_add_audit_query_string.py
/volume2/docker/location-logger/app/services/geofence_service.py
/volume2/docker/location-logger/app/services/recorder_service.py
/volume2/docker/location-logger/app/services/trip_service.py
/volume2/docker/location-logger/app/services/enhanced_location_service.py
/volume2/docker/location-logger/app/services/geocoding_service.py
/volume2/docker/location-logger/app/clients/__init__.py
/volume2/docker/location-logger/app/clients/dawarich_client.py
/volume2/docker/location-logger/app/clients/owntracks_client.py
/volume2/docker/location-logger/app/models/areas.py
/volume2/docker/location-logger/app/models/geofence_events.py
/volume2/docker/location-logger/app/models/trips.py
/volume2/docker/location-logger/app/models/user.py
/volume2/docker/location-logger/app/models/location.py
/volume2/docker/location-logger/app/models/audit_log.py
/volume2/docker/location-logger/app/auth/__init__.py
/volume2/docker/location-logger/app/auth/dependencies.py
/volume2/docker/location-logger/app/auth/utils.py
/volume2/docker/location-logger/app/api/enhanced_endpoints.py
/volume2/docker/location-logger/app/db/base.py
/volume2/docker/location-logger/app/db/session.py
Bash
IN
tree -L 4 /volume2/docker/location-logger 2>/dev/null || find /volume2/docker/location-logger -type d | sort
Copy code to clipboard
OUT
/volume2/docker/location-logger
├── alembic
│ ├── env.py
│ ├── script.py.mako
│ └── versions
│ ├── 20260203_201500_create_location_points_table.py
│ ├── 20260209_200000_add_enhanced_fields_and_tables.py
│ ├── 20260214_000000_add_users_and_audit_logs.py
│ ├── 20260320_000000_add_audit_query_string.py
│ └── __pycache__
│ └── 20260214_000000_add_users_and_audit_logs.cpython-311.pyc
├── alembic.ini
├── app
│ ├── api
│ │ └── enhanced_endpoints.py
│ ├── auth
│ │ ├── dependencies.py
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ │ ├── dependencies.cpython-311.pyc
│ │ │ ├── __init__.cpython-311.pyc
│ │ │ └── utils.cpython-311.pyc
│ │ └── utils.py
│ ├── clients
│ │ ├── dawarich_client.py
│ │ ├── __init__.py
│ │ └── owntracks_client.py
│ ├── config.py
│ ├── db
│ │ ├── base.py
│ │ └── session.py
│ ├── __init__.py
│ ├── main.py
│ ├── models
│ │ ├── areas.py
│ │ ├── audit_log.py
│ │ ├── geofence_events.py
│ │ ├── location.py
│ │ ├── __pycache__
│ │ │ ├── audit_log.cpython-311.pyc
│ │ │ └── user.cpython-311.pyc
│ │ ├── trips.py
│ │ └── user.py
│ ├── __pycache__
│ │ ├── __init__.cpython-311.pyc
│ │ └── main.cpython-311.pyc
│ ├── services
│ │ ├── enhanced_location_service.py
│ │ ├── geocoding_service.py
│ │ ├── geofence_service.py
│ │ ├── recorder_service.py
│ │ └── trip_service.py
│ ├── static
│ │ └── dashboard.html
│ └── utils.py
├── docker-compose.yml
├── Dockerfile
├── mcp-server
│ ├── Dockerfile
│ ├── requirements.txt
│ └── server.py
├── README.md
├── requirements.txt
└── today_map.html
16 directories, 48 files
Read
utils.py
utils.py
Read
dependencies.py
dependencies.py
Read
user.py
user.py
Read
config.py
config.py
Read
main.py
main.py
Read
session.py
session.py
Read
dashboard.html
dashboard.html
Read
audit_log.py
audit_log.py
Read
20260214_000000_add_users_and_audit_logs.py
20260214_000000_add_users_and_audit_logs.py
Read
20260320_000000_add_audit_query_string.py
20260320_000000_add_audit_query_string.py
Read
README.md
README.md
Read
requirements.txt
requirements.txt
Read
server.py
server.py
Read
server.py
server.py
(lines 101-400)
Thinking
Thinking
Now I have a full picture of both systems. Let me read the payments-logger source files before planning the migration.
Bash
List all payments-logger files
IN
find /volume2/docker/payments-logger -type f | grep -v node_modules | grep -v .git | sort
Copy code to clipboard
OUT
/volume2/docker/payments-logger/API.md
/volume2/docker/payments-logger/backend/Dockerfile
/volume2/docker/payments-logger/backend/.dockerignore
/volume2/docker/payments-logger/backend/package.json
/volume2/docker/payments-logger/backend/prisma/migrations/20260210_init/migration.sql
/volume2/docker/payments-logger/backend/prisma/migrations/20260210_simplify/migration.sql
/volume2/docker/payments-logger/backend/prisma/migrations/20260222_add_card/migration.sql
/volume2/docker/payments-logger/backend/prisma/migrations/migration_lock.toml
/volume2/docker/payments-logger/backend/prisma/schema.prisma
/volume2/docker/payments-logger/backend/src/auth.js
/volume2/docker/payments-logger/backend/src/index.js
/volume2/docker/payments-logger/backend/src/parser.js
/volume2/docker/payments-logger/backend/src/routes/payments.js
/volume2/docker/payments-logger/.claude/settings.local.json
/volume2/docker/payments-logger/docker-compose.yml
/volume2/docker/payments-logger/.env
/volume2/docker/payments-logger/.env.example
/volume2/docker/payments-logger/frontend/Dockerfile
/volume2/docker/payments-logger/frontend/.dockerignore
/volume2/docker/payments-logger/frontend/index.html
/volume2/docker/payments-logger/frontend/package.json
/volume2/docker/payments-logger/frontend/postcss.config.js
/volume2/docker/payments-logger/frontend/src/App.jsx
/volume2/docker/payments-logger/frontend/src/auth.js
/volume2/docker/payments-logger/frontend/src/components/AuthCallback.jsx
/volume2/docker/payments-logger/frontend/src/components/AuthProvider.jsx
/volume2/docker/payments-logger/frontend/src/components/FilterBar.jsx
/volume2/docker/payments-logger/frontend/src/components/PaymentCard.jsx
/volume2/docker/payments-logger/frontend/src/components/PaymentList.jsx
/volume2/docker/payments-logger/frontend/src/components/PaymentTable.jsx
/volume2/docker/payments-logger/frontend/src/index.css
/volume2/docker/payments-logger/frontend/src/main.jsx
/volume2/docker/payments-logger/frontend/tailwind.config.js
/volume2/docker/payments-logger/frontend/vite.config.js
/volume2/docker/payments-logger/README.md
Read
auth.js
auth.js
Read
index.js
index.js
Read
auth.js
auth.js
Read
AuthProvider.jsx
AuthProvider.jsx
Read
package.json
package.json
Read
AuthCallback.jsx
AuthCallback.jsx
Read
schema.prisma
schema.prisma
Read
docker-compose.yml
docker-compose.yml
Thinking
Thinking
Now let me read the remaining frontend files.
Read
App.jsx
App.jsx
Read
package.json
package.json
Read
.env
.env
*
Working...
Queue another message…
Queue another message…
Add
Show command menu (/)
docker-compose.yml
docker-compose.yml
Edit automatically
Edit automatically...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
26324
|
1092
|
4
|
2026-05-12T12:20:54.318087+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778588454318_m1.jpg...
|
Claude
|
Claude
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Collapse sidebar
Search
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Artifacts
Customize
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Screenpipe data sync and retention management
More options for Screenpipe data sync and retention management
Screenpipe sync script failing after recent migrations
More options for Screenpipe sync script failing after recent migrations
Hubspot BadRequest headers debugging
More options for Hubspot BadRequest headers debugging
Monthly expense tracking
More options for Monthly expense tracking
Exporting transaction data from Notion to finance hub
More options for Exporting transaction data from Notion to finance hub
💬 How much have I spent for groc…
More options for 💬 How much have I spent for groc…
April 2026 spending by category
More options for April 2026 spending by category
Code diff review
More options for Code diff review
HubSpot rate limit implementation strategy
More options for HubSpot rate limit implementation strategy
Screenpipe retention policy code location
More options for Screenpipe retention policy code location
Viewing retention policy in screenpipe
More options for Viewing retention policy in screenpipe
Clean shot x video recording termination issue
More options for Clean shot x video recording termination issue
HubSpot rate limit handling with executeRequest
More options for HubSpot rate limit handling with executeRequest
Untitled
More options
💬 Screen pipe. Is there ability…
More options for 💬 Screen pipe. Is there ability…
SMB mount access inconsistency between Finder and iTerm
More options for SMB mount access inconsistency between Finder and iTerm
💬 What is the best switch I can…
More options for 💬 What is the best switch I can…
Permission denied on screenpipe volume
More options for Permission denied on screenpipe volume
Screenpipe sync database attachment error
More options for Screenpipe sync database attachment error
Last swimming outing with Dani
More options for Last swimming outing with Dani
Lukas Pro
Get apps and extensions
Screenpipe data sync and retention management, rename chat
Screenpipe data sync and retention management
More options for Screenpipe data sync and retention management
Close
Share chat
Claude finished the response
You said: Lets start from the beginning with the fresh mind.
You said: Lets start from the beginning with the fresh mind.
Pasted Text, pasted, 495 lines
#!/bin/bash # screenpipe_sync.sh # Syncs Screenpipe SQLite data to a NAS archive database (append-only, no deletions). # Also copies the day's video/frame data folder to the NAS. # # Schema-drift tolerant: if Screenpipe migrations add new columns to the source DB, # the NAS archive gets ALTER TABLE'
PASTED
Lets start from the beginning with the fresh mind. There is a script for screenpipe to copy data for day from mac to nas. There are two issues I want to work with. Firsts if I reinstall the mac version it starts from fresh id 1. That causes some issues. How to make sure the data are valid. I don't want some overcomplicated flow. I was thinking about making new db every 3 months. Secodn issue is that I wan to implement cleanup (retention policy) on mac original screenpipe db. I want script that will remove data that are 7 days old or older for example. ANd lastly I want to extedn the script to work with audio as well. What od you need
20:19
Retry
Edit
Copy
Claude responded: Good plan to tackle these together — they interact (retention timing depends on sync timing, audio sync depends on schema shape, ID strategy depends on whether…
Claude responded: Good plan to tackle these together — they interact (retention timing depends on sync timing, audio sync depends on schema shape, ID strategy depends on whether…
Analyzed three technical challenges and identified clarifying questions needed
Analyzed three technical challenges and identified clarifying questions needed
Good plan to tackle these together — they interact (retention timing depends on sync timing, audio sync depends on schema shape, ID strategy depends on whether reinstalls have already happened). Before I touch the script, a few things:
Issue 1 — ID collisions / archive rotation
Has a reinstall already happened, or is the current
archive.db
still from one continuous install? If collisions already exist I need to handle that first; if not, we have a clean slate.
Quarterly rotation works, but it doesn't actually solve reinstalls
within
a quarter. A cleaner option that I'd lean toward: add an
install_id
column (UUID generated once and stored in a tiny
_meta
table in the source DB) to every synced table, and make
(install_id, id)
the logical key. FK joins just gain one extra predicate. Reinstall → new install_id → no collisions, ever. You can still rotate the archive DB quarterly for file-size reasons, but it's no longer load-bearing.
Do you ever run cross-period queries (e.g. "every frame mentioning JY-20458 across all time")? That answers whether quarterly sharding is acceptable or whether one growing DB is better.
Issue 2 — Mac-side retention
Your launch command already has
--retention-days 7
. Is that not actually deleting anything, or do you want a separate scripted retention you can trust/observe independently?
Should retention also wipe the matching
~/.screenpipe/data/data/YYYY-MM-DD/
folders, or only DB rows? (CLI flag does both I believe; a script should match.)
Run order matters: sync writes
yesterday
, retention deletes
>7 days old
— no overlap, but I'd still chain them (sync → retention → log) in one cron entry so a failed sync blocks the delete. OK with that?
Issue 3 — Audio
Your current launch flag is
--disable-audio
, so right now there's no audio data to sync. Are you planning to enable it, or is this just to future-proof the script?
I need the audio schema. Could you run this and paste the output:
Copy to clipboard
sqlite3 ~/.screenpipe/db.sqlite ".schema" | grep -iE -A 20 "audio|transcription"
And:
ls ~/.screenpipe/data/data/$(date -v-1d +%Y-%m-%d)/ | head
so I can see what audio files look like on disk alongside the mp4 frames.
Once I have those, I'll restructure the script in one go rather than piecemeal.
Copy
Give positive feedback
Give negative feedback
Retry
You said: ok lets add install_id.
You said: ok lets add install_id.
Pasted Text, pasted, 208 lines
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite ".schema" | grep -iE -A 20 "audio|transcription" CREATE TABLE audio_chunks ( id INTEGER PRIMARY KEY AUTOINCREMENT, file_path TEXT NOT NULL , timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, ev
PASTED
ok lets add install_id. Lets add separate script deleting data again from data and it should also remove logs and data. Make it manual script for now. I will remove --disable-audio from alias and run it without. I wan to have audio as well. lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ls ~/.screenpipe/data/data/$(date -v-1d +%Y-%m-%d)/ | head
compact_monitor_1_1778411210025.mp4
compact_monitor_1_1778413422547.mp4
compact_monitor_1_1778436664801.mp4
compact_monitor_1_1778437267451.mp4
compact_monitor_1_1778437569681.mp4
compact_monitor_1_1778437873507.mp4
compact_monitor_1_1778438175846.mp4
compact_monitor_1_1778438477299.mp4
compact_monitor_1_1778438780686.mp4
compact_monitor_1_1778439082442.mp4 Inside ~/,screenpipe/data there are data like this ... -rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4
drwxr-xr-x 9 lukas staff 288 11 May 07:54 data
drwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions
-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4
-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4
-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4
-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4
-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4
-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4
-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4
-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4...
Show more
20:34
Retry
Edit
Copy
Claude responded: Good, that clarifies the audio layout — audio files live flat in ~/.
Claude responded: Good, that clarifies the audio layout — audio files live flat in ~/.
Architected multi-install sync with audio support and retention
Architected multi-install sync with audio support and retention
Good, that clarifies the audio layout — audio files live flat in
~/.screenpipe/data/
with the date in the filename (not in date subdirs like frames), and the schema gives us
audio_chunks
+
audio_transcriptions
+
speakers
+
speaker_embeddings
+
audio_tags
plus the FTS table on transcriptions.
Plan I'll implement:
install_id
: stored as a UUID in
~/.screenpipe/.sync_install_id
— disappears when the directory is wiped (which is what you want on reinstall). Every synced NAS table gets an
install_id TEXT
column and a
UNIQUE(install_id, id)
index. The script auto-migrates the existing NAS archive by adding the column and tagging legacy rows with
legacy-YYYYMMDD
so historical data is still queryable but doesn't conflict with future installs.
Audio sync
: adds
audio_chunks
,
audio_transcriptions
,
speakers
,
speaker_embeddings
,
audio_tags
to the sync pipeline, plus the
audio_transcriptions_fts
index. Audio files go to
$NAS_DATA/<date>/audio/
(sibling to the frames in the same date dir, keeps daily archives self-contained).
Retention
is a separate manual script — dry-run by default,
--apply
to delete. Hits DB rows, frame directories, audio mp4s, and screenpipe logs. Optional
--vacuum
with a warning (screenpipe must be stopped to avoid blocking writes for minutes).
One caveat I'm punting on: the FTS tables use source
id
as
rowid
, so after a reinstall they'd get id-collisions on insert and
INSERT OR IGNORE
would silently skip. Within a single install this is fine; after reinstall you'd fall back to
LIKE
queries on the base tables (still filterable by
install_id
). I noted this in the script. Fixing it properly needs a synthetic rowid scheme which we can do later if you actually hit it.
Let me write both:
Updated screenpipe_sync.sh with install_id support and audio sync
Updated screenpipe_sync.sh with install_id support and audio sync
Updated screenpipe_sync.sh with install_id support and audio sync
Updated screenpipe_sync.sh with install_id support and audio sync
screenpipe_sync.sh
Done
Copy
Give positive feedback
Give negative feedback
Retry
You said: I don't like that.
You said: I don't like that.
I don't like that. It should be solid without id collisions. Wouldn't it be to late if I should fix it later?
14:26
Retry
Edit
Copy...
|
[{"role":"AXLink","text":& [{"role":"AXLink","text":"Skip to content","depth":14,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Skip to content","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Click to collapse","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘B","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drag to resize","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Collapse sidebar","depth":15,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search","depth":15,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cowork","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New chat ⌘N","depth":15,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"New chat","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘N","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Projects","depth":15,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Artifacts","depth":15,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":15,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pinned","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Bulgarian citizenship application process for EU residents","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Bulgarian citizenship application process for EU residents","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Dawarich location tracking project","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Dawarich location tracking project","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Recents","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"View all","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe data sync and retention management","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe data sync and retention management","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe sync script failing after recent migrations","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe sync script failing after recent migrations","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hubspot BadRequest headers debugging","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Hubspot BadRequest headers debugging","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Monthly expense tracking","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Monthly expense tracking","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Exporting transaction data from Notion to finance hub","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Exporting transaction data from Notion to finance hub","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"💬 How much have I spent for groc…","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for 💬 How much have I spent for groc…","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"April 2026 spending by category","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for April 2026 spending by category","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code diff review","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Code diff review","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HubSpot rate limit implementation strategy","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for HubSpot rate limit implementation strategy","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe retention policy code location","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe retention policy code location","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Viewing retention policy in screenpipe","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Viewing retention policy in screenpipe","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Clean shot x video recording termination issue","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Clean shot x video recording termination issue","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HubSpot rate limit handling with executeRequest","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for HubSpot rate limit handling with executeRequest","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Untitled","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"💬 Screen pipe. Is there ability…","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for 💬 Screen pipe. Is there ability…","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"SMB mount access inconsistency between Finder and iTerm","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for SMB mount access inconsistency between Finder and iTerm","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"💬 What is the best switch I can…","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for 💬 What is the best switch I can…","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Permission denied on screenpipe volume","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Permission denied on screenpipe volume","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe sync database attachment error","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe sync database attachment error","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Last swimming outing with Dani","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Last swimming outing with Dani","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Lukas Pro","depth":15,"bounds":{"left":0.49097222,"top":0.0,"width":0.08055556,"height":0.026666667},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Get apps and extensions","depth":15,"bounds":{"left":0.6576389,"top":0.0,"width":0.016666668,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe data sync and retention management, rename chat","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe data sync and retention management","depth":21,"on_screen":true,"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Screenpipe data sync and retention management","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share chat","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Claude finished the response","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"You said: Lets start from the beginning with the fresh mind.","depth":20,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"You said: Lets start from the beginning with the fresh mind.","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Pasted Text, pasted, 495 lines","depth":21,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash # screenpipe_sync.sh # Syncs Screenpipe SQLite data to a NAS archive database (append-only, no deletions). # Also copies the day's video/frame data folder to the NAS. # # Schema-drift tolerant: if Screenpipe migrations add new columns to the source DB, # the NAS archive gets ALTER TABLE'","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PASTED","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Lets start from the beginning with the fresh mind. There is a script for screenpipe to copy data for day from mac to nas. There are two issues I want to work with. Firsts if I reinstall the mac version it starts from fresh id 1. That causes some issues. How to make sure the data are valid. I don't want some overcomplicated flow. I was thinking about making new db every 3 months. Secodn issue is that I wan to implement cleanup (retention policy) on mac original screenpipe db. I want script that will remove data that are 7 days old or older for example. ANd lastly I want to extedn the script to work with audio as well. What od you need","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"20:19","depth":22,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Claude responded: Good plan to tackle these together — they interact (retention timing depends on sync timing, audio sync depends on schema shape, ID strategy depends on whether…","depth":21,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Claude responded: Good plan to tackle these together — they interact (retention timing depends on sync timing, audio sync depends on schema shape, ID strategy depends on whether…","depth":22,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Analyzed three technical challenges and identified clarifying questions needed","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Analyzed three technical challenges and identified clarifying questions needed","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Good plan to tackle these together — they interact (retention timing depends on sync timing, audio sync depends on schema shape, ID strategy depends on whether reinstalls have already happened). Before I touch the script, a few things:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Issue 1 — ID collisions / archive rotation","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Has a reinstall already happened, or is the current","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"still from one continuous install? If collisions already exist I need to handle that first; if not, we have a clean slate.","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Quarterly rotation works, but it doesn't actually solve reinstalls","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"within","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"a quarter. A cleaner option that I'd lean toward: add an","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"install_id","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"column (UUID generated once and stored in a tiny","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"_meta","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"table in the source DB) to every synced table, and make","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(install_id, id)","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"the logical key. FK joins just gain one extra predicate. Reinstall → new install_id → no collisions, ever. You can still rotate the archive DB quarterly for file-size reasons, but it's no longer load-bearing.","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Do you ever run cross-period queries (e.g. \"every frame mentioning JY-20458 across all time\")? That answers whether quarterly sharding is acceptable or whether one growing DB is better.","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Issue 2 — Mac-side retention","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Your launch command already has","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"--retention-days 7","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":". Is that not actually deleting anything, or do you want a separate scripted retention you can trust/observe independently?","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Should retention also wipe the matching","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"~/.screenpipe/data/data/YYYY-MM-DD/","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"folders, or only DB rows? (CLI flag does both I believe; a script should match.)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Run order matters: sync writes","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"yesterday","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":", retention deletes","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":">7 days old","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— no overlap, but I'd still chain them (sync → retention → log) in one cron entry so a failed sync blocks the delete. OK with that?","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Issue 3 — Audio","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Your current launch flag is","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"--disable-audio","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":", so right now there's no audio data to sync. Are you planning to enable it, or is this just to future-proof the script?","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"I need the audio schema. Could you run this and paste the output:","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":27,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite \".schema\" | grep -iE -A 20 \"audio|transcription\"","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"And:","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls ~/.screenpipe/data/data/$(date -v-1d +%Y-%m-%d)/ | head","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"so I can see what audio files look like on disk alongside the mp4 frames.","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Once I have those, I'll restructure the script in one go rather than piecemeal.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give positive feedback","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give negative feedback","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"You said: ok lets add install_id.","depth":20,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"You said: ok lets add install_id.","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Pasted Text, pasted, 208 lines","depth":21,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \".schema\" | grep -iE -A 20 \"audio|transcription\" CREATE TABLE audio_chunks ( id INTEGER PRIMARY KEY AUTOINCREMENT, file_path TEXT NOT NULL , timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, ev","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PASTED","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ok lets add install_id. Lets add separate script deleting data again from data and it should also remove logs and data. Make it manual script for now. I will remove --disable-audio from alias and run it without. I wan to have audio as well. lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ls ~/.screenpipe/data/data/$(date -v-1d +%Y-%m-%d)/ | head\ncompact_monitor_1_1778411210025.mp4\ncompact_monitor_1_1778413422547.mp4\ncompact_monitor_1_1778436664801.mp4\ncompact_monitor_1_1778437267451.mp4\ncompact_monitor_1_1778437569681.mp4\ncompact_monitor_1_1778437873507.mp4\ncompact_monitor_1_1778438175846.mp4\ncompact_monitor_1_1778438477299.mp4\ncompact_monitor_1_1778438780686.mp4\ncompact_monitor_1_1778439082442.mp4 Inside ~/,screenpipe/data there are data like this ... -rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4...","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Show more","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"20:34","depth":22,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Claude responded: Good, that clarifies the audio layout — audio files live flat in ~/.","depth":21,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Claude responded: Good, that clarifies the audio layout — audio files live flat in ~/.","depth":22,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Architected multi-install sync with audio support and retention","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Architected multi-install sync with audio support and retention","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Good, that clarifies the audio layout — audio files live flat in","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"~/.screenpipe/data/","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"with the date in the filename (not in date subdirs like frames), and the schema gives us","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"audio_chunks","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"+","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"audio_transcriptions","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"+","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"speakers","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"+","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"speaker_embeddings","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"+","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"audio_tags","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"plus the FTS table on transcriptions.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Plan I'll implement:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"install_id","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":": stored as a UUID in","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"~/.screenpipe/.sync_install_id","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— disappears when the directory is wiped (which is what you want on reinstall). Every synced NAS table gets an","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"install_id TEXT","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"column and a","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"UNIQUE(install_id, id)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"index. The script auto-migrates the existing NAS archive by adding the column and tagging legacy rows with","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"legacy-YYYYMMDD","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"so historical data is still queryable but doesn't conflict with future installs.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Audio sync","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":": adds","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"audio_chunks","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"audio_transcriptions","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"speakers","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"speaker_embeddings","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"audio_tags","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"to the sync pipeline, plus the","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"audio_transcriptions_fts","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"index. Audio files go to","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"$NAS_DATA/<date>/audio/","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(sibling to the frames in the same date dir, keeps daily archives self-contained).","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Retention","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"is a separate manual script — dry-run by default,","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"--apply","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"to delete. Hits DB rows, frame directories, audio mp4s, and screenpipe logs. Optional","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"--vacuum","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"with a warning (screenpipe must be stopped to avoid blocking writes for minutes).","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"One caveat I'm punting on: the FTS tables use source","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"id","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"as","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"rowid","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":", so after a reinstall they'd get id-collisions on insert and","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"INSERT OR IGNORE","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"would silently skip. Within a single install this is fine; after reinstall you'd fall back to","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"LIKE","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"queries on the base tables (still filterable by","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"install_id","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"). I noted this in the script. Fixing it properly needs a synthetic rowid scheme which we can do later if you actually hit it.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me write both:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Updated screenpipe_sync.sh with install_id support and audio sync","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Updated screenpipe_sync.sh with install_id support and audio sync","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Updated screenpipe_sync.sh with install_id support and audio sync","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Updated screenpipe_sync.sh with install_id support and audio sync","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"screenpipe_sync.sh","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Done","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give positive feedback","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give negative feedback","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"You said: I don't like that.","depth":20,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"You said: I don't like that.","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"I don't like that. It should be solid without id collisions. Wouldn't it be to late if I should fix it later?","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"14:26","depth":22,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8663917089122782882
|
-8498644862608868153
|
click
|
accessibility
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Collapse sidebar
Search
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Artifacts
Customize
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Screenpipe data sync and retention management
More options for Screenpipe data sync and retention management
Screenpipe sync script failing after recent migrations
More options for Screenpipe sync script failing after recent migrations
Hubspot BadRequest headers debugging
More options for Hubspot BadRequest headers debugging
Monthly expense tracking
More options for Monthly expense tracking
Exporting transaction data from Notion to finance hub
More options for Exporting transaction data from Notion to finance hub
💬 How much have I spent for groc…
More options for 💬 How much have I spent for groc…
April 2026 spending by category
More options for April 2026 spending by category
Code diff review
More options for Code diff review
HubSpot rate limit implementation strategy
More options for HubSpot rate limit implementation strategy
Screenpipe retention policy code location
More options for Screenpipe retention policy code location
Viewing retention policy in screenpipe
More options for Viewing retention policy in screenpipe
Clean shot x video recording termination issue
More options for Clean shot x video recording termination issue
HubSpot rate limit handling with executeRequest
More options for HubSpot rate limit handling with executeRequest
Untitled
More options
💬 Screen pipe. Is there ability…
More options for 💬 Screen pipe. Is there ability…
SMB mount access inconsistency between Finder and iTerm
More options for SMB mount access inconsistency between Finder and iTerm
💬 What is the best switch I can…
More options for 💬 What is the best switch I can…
Permission denied on screenpipe volume
More options for Permission denied on screenpipe volume
Screenpipe sync database attachment error
More options for Screenpipe sync database attachment error
Last swimming outing with Dani
More options for Last swimming outing with Dani
Lukas Pro
Get apps and extensions
Screenpipe data sync and retention management, rename chat
Screenpipe data sync and retention management
More options for Screenpipe data sync and retention management
Close
Share chat
Claude finished the response
You said: Lets start from the beginning with the fresh mind.
You said: Lets start from the beginning with the fresh mind.
Pasted Text, pasted, 495 lines
#!/bin/bash # screenpipe_sync.sh # Syncs Screenpipe SQLite data to a NAS archive database (append-only, no deletions). # Also copies the day's video/frame data folder to the NAS. # # Schema-drift tolerant: if Screenpipe migrations add new columns to the source DB, # the NAS archive gets ALTER TABLE'
PASTED
Lets start from the beginning with the fresh mind. There is a script for screenpipe to copy data for day from mac to nas. There are two issues I want to work with. Firsts if I reinstall the mac version it starts from fresh id 1. That causes some issues. How to make sure the data are valid. I don't want some overcomplicated flow. I was thinking about making new db every 3 months. Secodn issue is that I wan to implement cleanup (retention policy) on mac original screenpipe db. I want script that will remove data that are 7 days old or older for example. ANd lastly I want to extedn the script to work with audio as well. What od you need
20:19
Retry
Edit
Copy
Claude responded: Good plan to tackle these together — they interact (retention timing depends on sync timing, audio sync depends on schema shape, ID strategy depends on whether…
Claude responded: Good plan to tackle these together — they interact (retention timing depends on sync timing, audio sync depends on schema shape, ID strategy depends on whether…
Analyzed three technical challenges and identified clarifying questions needed
Analyzed three technical challenges and identified clarifying questions needed
Good plan to tackle these together — they interact (retention timing depends on sync timing, audio sync depends on schema shape, ID strategy depends on whether reinstalls have already happened). Before I touch the script, a few things:
Issue 1 — ID collisions / archive rotation
Has a reinstall already happened, or is the current
archive.db
still from one continuous install? If collisions already exist I need to handle that first; if not, we have a clean slate.
Quarterly rotation works, but it doesn't actually solve reinstalls
within
a quarter. A cleaner option that I'd lean toward: add an
install_id
column (UUID generated once and stored in a tiny
_meta
table in the source DB) to every synced table, and make
(install_id, id)
the logical key. FK joins just gain one extra predicate. Reinstall → new install_id → no collisions, ever. You can still rotate the archive DB quarterly for file-size reasons, but it's no longer load-bearing.
Do you ever run cross-period queries (e.g. "every frame mentioning JY-20458 across all time")? That answers whether quarterly sharding is acceptable or whether one growing DB is better.
Issue 2 — Mac-side retention
Your launch command already has
--retention-days 7
. Is that not actually deleting anything, or do you want a separate scripted retention you can trust/observe independently?
Should retention also wipe the matching
~/.screenpipe/data/data/YYYY-MM-DD/
folders, or only DB rows? (CLI flag does both I believe; a script should match.)
Run order matters: sync writes
yesterday
, retention deletes
>7 days old
— no overlap, but I'd still chain them (sync → retention → log) in one cron entry so a failed sync blocks the delete. OK with that?
Issue 3 — Audio
Your current launch flag is
--disable-audio
, so right now there's no audio data to sync. Are you planning to enable it, or is this just to future-proof the script?
I need the audio schema. Could you run this and paste the output:
Copy to clipboard
sqlite3 ~/.screenpipe/db.sqlite ".schema" | grep -iE -A 20 "audio|transcription"
And:
ls ~/.screenpipe/data/data/$(date -v-1d +%Y-%m-%d)/ | head
so I can see what audio files look like on disk alongside the mp4 frames.
Once I have those, I'll restructure the script in one go rather than piecemeal.
Copy
Give positive feedback
Give negative feedback
Retry
You said: ok lets add install_id.
You said: ok lets add install_id.
Pasted Text, pasted, 208 lines
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite ".schema" | grep -iE -A 20 "audio|transcription" CREATE TABLE audio_chunks ( id INTEGER PRIMARY KEY AUTOINCREMENT, file_path TEXT NOT NULL , timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, ev
PASTED
ok lets add install_id. Lets add separate script deleting data again from data and it should also remove logs and data. Make it manual script for now. I will remove --disable-audio from alias and run it without. I wan to have audio as well. lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ls ~/.screenpipe/data/data/$(date -v-1d +%Y-%m-%d)/ | head
compact_monitor_1_1778411210025.mp4
compact_monitor_1_1778413422547.mp4
compact_monitor_1_1778436664801.mp4
compact_monitor_1_1778437267451.mp4
compact_monitor_1_1778437569681.mp4
compact_monitor_1_1778437873507.mp4
compact_monitor_1_1778438175846.mp4
compact_monitor_1_1778438477299.mp4
compact_monitor_1_1778438780686.mp4
compact_monitor_1_1778439082442.mp4 Inside ~/,screenpipe/data there are data like this ... -rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4
drwxr-xr-x 9 lukas staff 288 11 May 07:54 data
drwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions
-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4
-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4
-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4
-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4
-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4
-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4
-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4
-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4...
Show more
20:34
Retry
Edit
Copy
Claude responded: Good, that clarifies the audio layout — audio files live flat in ~/.
Claude responded: Good, that clarifies the audio layout — audio files live flat in ~/.
Architected multi-install sync with audio support and retention
Architected multi-install sync with audio support and retention
Good, that clarifies the audio layout — audio files live flat in
~/.screenpipe/data/
with the date in the filename (not in date subdirs like frames), and the schema gives us
audio_chunks
+
audio_transcriptions
+
speakers
+
speaker_embeddings
+
audio_tags
plus the FTS table on transcriptions.
Plan I'll implement:
install_id
: stored as a UUID in
~/.screenpipe/.sync_install_id
— disappears when the directory is wiped (which is what you want on reinstall). Every synced NAS table gets an
install_id TEXT
column and a
UNIQUE(install_id, id)
index. The script auto-migrates the existing NAS archive by adding the column and tagging legacy rows with
legacy-YYYYMMDD
so historical data is still queryable but doesn't conflict with future installs.
Audio sync
: adds
audio_chunks
,
audio_transcriptions
,
speakers
,
speaker_embeddings
,
audio_tags
to the sync pipeline, plus the
audio_transcriptions_fts
index. Audio files go to
$NAS_DATA/<date>/audio/
(sibling to the frames in the same date dir, keeps daily archives self-contained).
Retention
is a separate manual script — dry-run by default,
--apply
to delete. Hits DB rows, frame directories, audio mp4s, and screenpipe logs. Optional
--vacuum
with a warning (screenpipe must be stopped to avoid blocking writes for minutes).
One caveat I'm punting on: the FTS tables use source
id
as
rowid
, so after a reinstall they'd get id-collisions on insert and
INSERT OR IGNORE
would silently skip. Within a single install this is fine; after reinstall you'd fall back to
LIKE
queries on the base tables (still filterable by
install_id
). I noted this in the script. Fixing it properly needs a synthetic rowid scheme which we can do later if you actually hit it.
Let me write both:
Updated screenpipe_sync.sh with install_id support and audio sync
Updated screenpipe_sync.sh with install_id support and audio sync
Updated screenpipe_sync.sh with install_id support and audio sync
Updated screenpipe_sync.sh with install_id support and audio sync
screenpipe_sync.sh
Done
Copy
Give positive feedback
Give negative feedback
Retry
You said: I don't like that.
You said: I don't like that.
I don't like that. It should be solid without id collisions. Wouldn't it be to late if I should fix it later?
14:26
Retry
Edit
Copy...
|
26322
|
NULL
|
NULL
|
NULL
|
|
504
|
21
|
24
|
2026-05-07T07:14:14.689889+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778138054689_m1.jpg...
|
iTerm2
|
screenpipe"
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Thu May 7 09:44:56 on ttys009
Poetry Last login: Thu May 7 09:44:56 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start
detected hardware tier: Mid
warning: parakeet is not supported on this platform, using whisper-tiny instead
2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store
checking permissions...
screen recording: ok
accessibility: ok
2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-07T09:45:22.650600Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ true │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ ["Boosteroid"] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ disabled │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: https://github.com/screenpipe/screenpipe/releases
2026-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture
2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh
2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))
2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture
2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9
2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)
2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)
2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)
2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on [IP_ADDRESS]:3030
2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030
2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC
2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)
2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)
2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)
2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)
2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms
2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)
2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms
2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: "....", help: "https://www.osstatus.com?search=-25212" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app
2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)
2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)
2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)
2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)
2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some("Firefox"), source=Some("ui_scan")
2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames
2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted
2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted
2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted
tip: install a starter bundle of pipes:
screenpipe install https://screenpi.pe/start.json
2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)
2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames
2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted
2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
screenpipe login
2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames
2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted
2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted
2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)
2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)
2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)
2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)
2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)
2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)
2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)
2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)
2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted
2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted
2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)
2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)
2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)
2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)
2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)
2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)
2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
⌥⌘1
screenpipe"...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Thu May 7 09:44:56 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start\ndetected hardware tier: Mid\nwarning: parakeet is not supported on this platform, using whisper-tiny instead\n2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-07T09:45:22.650600Z 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 │ [\"Boosteroid\"] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\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-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture\n2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9\n2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)\n2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC\n2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)\n2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms\n2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)\n2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms\n2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: \"....\", help: \"https://www.osstatus.com?search=-25212\" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app\n2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)\n2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)\n2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)\n2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)\n2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some(\"Firefox\"), source=Some(\"ui_scan\")\n2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames\n2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted\n2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted\n2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n screenpipe install https://screenpi.pe/start.json\n\n2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)\n2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames\n2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted\n2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n screenpipe login\n\n2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames\n2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted\n2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted\n2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)\n2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)\n2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)\n2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)\n2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)\n2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)\n2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)\n2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)\n2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted\n2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted\n2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)\n2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)\n2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)\n2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)\n2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)\n2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)\n2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)","depth":4,"on_screen":true,"value":"Last login: Thu May 7 09:44:56 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start\ndetected hardware tier: Mid\nwarning: parakeet is not supported on this platform, using whisper-tiny instead\n2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-07T09:45:22.650600Z 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 │ [\"Boosteroid\"] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\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-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture\n2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9\n2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)\n2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC\n2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)\n2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms\n2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)\n2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms\n2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: \"....\", help: \"https://www.osstatus.com?search=-25212\" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app\n2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)\n2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)\n2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)\n2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)\n2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some(\"Firefox\"), source=Some(\"ui_scan\")\n2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames\n2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted\n2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted\n2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n screenpipe install https://screenpi.pe/start.json\n\n2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)\n2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames\n2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted\n2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n screenpipe login\n\n2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames\n2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted\n2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted\n2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)\n2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)\n2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)\n2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)\n2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)\n2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)\n2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)\n2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)\n2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted\n2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted\n2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)\n2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)\n2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)\n2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)\n2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)\n2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)\n2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.19722222,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.2013889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.39444444,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.3986111,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.59166664,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.59583336,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.7888889,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.79305553,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.95763886,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.4722222,"top":0.033333335,"width":0.058333334,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
8663384110706991852
|
3293112124529284469
|
visual_change
|
accessibility
|
NULL
|
Last login: Thu May 7 09:44:56 on ttys009
Poetry Last login: Thu May 7 09:44:56 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start
detected hardware tier: Mid
warning: parakeet is not supported on this platform, using whisper-tiny instead
2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store
checking permissions...
screen recording: ok
accessibility: ok
2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-07T09:45:22.650600Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ true │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ ["Boosteroid"] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ disabled │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: https://github.com/screenpipe/screenpipe/releases
2026-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture
2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh
2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))
2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture
2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9
2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)
2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)
2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)
2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on [IP_ADDRESS]:3030
2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030
2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC
2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)
2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)
2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)
2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)
2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms
2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)
2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms
2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: "....", help: "https://www.osstatus.com?search=-25212" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app
2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)
2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)
2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)
2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)
2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some("Firefox"), source=Some("ui_scan")
2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames
2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted
2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted
2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted
tip: install a starter bundle of pipes:
screenpipe install https://screenpi.pe/start.json
2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)
2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames
2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted
2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
screenpipe login
2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames
2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted
2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted
2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)
2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)
2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)
2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)
2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)
2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)
2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)
2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)
2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted
2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted
2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)
2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)
2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)
2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)
2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)
2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)
2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
⌥⌘1
screenpipe"...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
505
|
22
|
21
|
2026-05-07T07:14:41.906033+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778138081906_m2.jpg...
|
iTerm2
|
screenpipe"
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Thu May 7 09:44:56 on ttys009
Poetry Last login: Thu May 7 09:44:56 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start
detected hardware tier: Mid
warning: parakeet is not supported on this platform, using whisper-tiny instead
2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store
checking permissions...
screen recording: ok
accessibility: ok
2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-07T09:45:22.650600Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ true │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ ["Boosteroid"] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ disabled │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: https://github.com/screenpipe/screenpipe/releases
2026-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture
2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh
2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))
2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture
2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9
2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)
2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)
2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)
2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on [IP_ADDRESS]:3030
2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030
2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC
2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)
2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)
2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)
2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)
2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms
2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)
2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms
2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: "....", help: "https://www.osstatus.com?search=-25212" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app
2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)
2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)
2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)
2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)
2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some("Firefox"), source=Some("ui_scan")
2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames
2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted
2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted
2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted
tip: install a starter bundle of pipes:
screenpipe install https://screenpi.pe/start.json
2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)
2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames
2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted
2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
screenpipe login
2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames
2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted
2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted
2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)
2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)
2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)
2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)
2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)
2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)
2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)
2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)
2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted
2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted
2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)
2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)
2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)
2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)
2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)
2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)
2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
⌥⌘1
screenpipe"...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Thu May 7 09:44:56 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start\ndetected hardware tier: Mid\nwarning: parakeet is not supported on this platform, using whisper-tiny instead\n2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-07T09:45:22.650600Z 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 │ [\"Boosteroid\"] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\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-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture\n2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9\n2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)\n2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC\n2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)\n2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms\n2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)\n2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms\n2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: \"....\", help: \"https://www.osstatus.com?search=-25212\" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app\n2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)\n2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)\n2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)\n2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)\n2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some(\"Firefox\"), source=Some(\"ui_scan\")\n2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames\n2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted\n2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted\n2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n screenpipe install https://screenpi.pe/start.json\n\n2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)\n2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames\n2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted\n2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n screenpipe login\n\n2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames\n2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted\n2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted\n2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)\n2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)\n2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)\n2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)\n2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)\n2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)\n2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)\n2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)\n2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted\n2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted\n2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)\n2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)\n2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)\n2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)\n2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)\n2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)\n2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)","depth":4,"on_screen":true,"value":"Last login: Thu May 7 09:44:56 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start\ndetected hardware tier: Mid\nwarning: parakeet is not supported on this platform, using whisper-tiny instead\n2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-07T09:45:22.650600Z 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 │ [\"Boosteroid\"] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\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-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture\n2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9\n2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)\n2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC\n2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)\n2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms\n2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)\n2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms\n2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: \"....\", help: \"https://www.osstatus.com?search=-25212\" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app\n2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)\n2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)\n2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)\n2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)\n2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some(\"Firefox\"), source=Some(\"ui_scan\")\n2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames\n2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted\n2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted\n2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n screenpipe install https://screenpi.pe/start.json\n\n2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)\n2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames\n2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted\n2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n screenpipe login\n\n2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames\n2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted\n2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted\n2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)\n2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)\n2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)\n2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)\n2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)\n2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)\n2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)\n2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)\n2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted\n2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted\n2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)\n2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)\n2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)\n2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)\n2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)\n2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)\n2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.27227393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.36469415,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.36668882,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.45910904,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.46110374,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.55352396,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.5555186,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.64793885,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6499335,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7287234,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.49634308,"top":1.0,"width":0.027925532,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
8663384110706991852
|
3293112124529284469
|
idle
|
accessibility
|
NULL
|
Last login: Thu May 7 09:44:56 on ttys009
Poetry Last login: Thu May 7 09:44:56 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start
detected hardware tier: Mid
warning: parakeet is not supported on this platform, using whisper-tiny instead
2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store
checking permissions...
screen recording: ok
accessibility: ok
2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-07T09:45:22.650600Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ true │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ ["Boosteroid"] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ disabled │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: https://github.com/screenpipe/screenpipe/releases
2026-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture
2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh
2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))
2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture
2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9
2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)
2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)
2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)
2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on [IP_ADDRESS]:3030
2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030
2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC
2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)
2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)
2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)
2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)
2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms
2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)
2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms
2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: "....", help: "https://www.osstatus.com?search=-25212" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app
2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)
2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)
2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)
2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)
2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some("Firefox"), source=Some("ui_scan")
2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames
2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted
2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted
2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted
tip: install a starter bundle of pipes:
screenpipe install https://screenpi.pe/start.json
2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)
2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames
2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted
2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
screenpipe login
2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames
2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted
2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted
2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)
2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)
2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)
2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)
2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)
2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)
2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)
2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)
2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted
2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted
2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)
2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)
2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)
2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)
2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)
2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)
2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
⌥⌘1
screenpipe"...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
506
|
21
|
25
|
2026-05-07T07:14:44.832304+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778138084832_m1.jpg...
|
iTerm2
|
screenpipe"
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Thu May 7 09:44:56 on ttys009
Poetry Last login: Thu May 7 09:44:56 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start
detected hardware tier: Mid
warning: parakeet is not supported on this platform, using whisper-tiny instead
2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store
checking permissions...
screen recording: ok
accessibility: ok
2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-07T09:45:22.650600Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ true │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ ["Boosteroid"] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ disabled │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: https://github.com/screenpipe/screenpipe/releases
2026-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture
2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh
2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))
2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture
2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9
2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)
2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)
2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)
2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on [IP_ADDRESS]:3030
2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030
2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC
2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)
2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)
2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)
2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)
2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms
2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)
2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms
2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: "....", help: "https://www.osstatus.com?search=-25212" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app
2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)
2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)
2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)
2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)
2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some("Firefox"), source=Some("ui_scan")
2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames
2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted
2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted
2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted
tip: install a starter bundle of pipes:
screenpipe install https://screenpi.pe/start.json
2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)
2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames
2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted
2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
screenpipe login
2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames
2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted
2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted
2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)
2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)
2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)
2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)
2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)
2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)
2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)
2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)
2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted
2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted
2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)
2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)
2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)
2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)
2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)
2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)
2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
⌥⌘1
screenpipe"...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Thu May 7 09:44:56 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start\ndetected hardware tier: Mid\nwarning: parakeet is not supported on this platform, using whisper-tiny instead\n2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-07T09:45:22.650600Z 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 │ [\"Boosteroid\"] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\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-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture\n2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9\n2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)\n2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC\n2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)\n2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms\n2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)\n2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms\n2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: \"....\", help: \"https://www.osstatus.com?search=-25212\" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app\n2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)\n2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)\n2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)\n2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)\n2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some(\"Firefox\"), source=Some(\"ui_scan\")\n2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames\n2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted\n2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted\n2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n screenpipe install https://screenpi.pe/start.json\n\n2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)\n2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames\n2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted\n2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n screenpipe login\n\n2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames\n2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted\n2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted\n2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)\n2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)\n2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)\n2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)\n2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)\n2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)\n2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)\n2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)\n2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted\n2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted\n2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)\n2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)\n2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)\n2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)\n2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)\n2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)\n2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)","depth":4,"on_screen":true,"value":"Last login: Thu May 7 09:44:56 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start\ndetected hardware tier: Mid\nwarning: parakeet is not supported on this platform, using whisper-tiny instead\n2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-07T09:45:22.650600Z 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 │ [\"Boosteroid\"] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\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-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture\n2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9\n2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)\n2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC\n2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)\n2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms\n2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)\n2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms\n2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: \"....\", help: \"https://www.osstatus.com?search=-25212\" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app\n2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)\n2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)\n2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)\n2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)\n2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some(\"Firefox\"), source=Some(\"ui_scan\")\n2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames\n2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted\n2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted\n2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n screenpipe install https://screenpi.pe/start.json\n\n2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)\n2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames\n2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted\n2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n screenpipe login\n\n2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames\n2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted\n2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted\n2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)\n2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)\n2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)\n2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)\n2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)\n2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)\n2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)\n2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)\n2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted\n2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted\n2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)\n2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)\n2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)\n2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)\n2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)\n2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)\n2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.19722222,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.2013889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.39444444,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.3986111,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.59166664,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.59583336,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.7888889,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.79305553,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.95763886,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.4722222,"top":0.033333335,"width":0.058333334,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
8663384110706991852
|
3293112124529284469
|
idle
|
accessibility
|
NULL
|
Last login: Thu May 7 09:44:56 on ttys009
Poetry Last login: Thu May 7 09:44:56 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start
detected hardware tier: Mid
warning: parakeet is not supported on this platform, using whisper-tiny instead
2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store
checking permissions...
screen recording: ok
accessibility: ok
2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-07T09:45:22.650600Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ true │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ ["Boosteroid"] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ disabled │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: https://github.com/screenpipe/screenpipe/releases
2026-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture
2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh
2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))
2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture
2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9
2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)
2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)
2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)
2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on [IP_ADDRESS]:3030
2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030
2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC
2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)
2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)
2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)
2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)
2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms
2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)
2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms
2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: "....", help: "https://www.osstatus.com?search=-25212" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app
2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)
2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)
2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)
2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)
2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some("Firefox"), source=Some("ui_scan")
2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames
2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted
2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted
2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted
tip: install a starter bundle of pipes:
screenpipe install https://screenpi.pe/start.json
2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)
2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames
2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted
2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
screenpipe login
2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames
2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted
2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted
2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)
2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)
2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)
2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)
2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)
2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)
2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)
2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)
2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted
2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted
2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)
2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)
2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)
2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)
2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)
2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)
2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
⌥⌘1
screenpipe"...
|
504
|
NULL
|
NULL
|
NULL
|
|
507
|
22
|
22
|
2026-05-07T07:15:12.069039+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778138112069_m2.jpg...
|
iTerm2
|
screenpipe"
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Thu May 7 09:44:56 on ttys009
Poetry Last login: Thu May 7 09:44:56 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start
detected hardware tier: Mid
warning: parakeet is not supported on this platform, using whisper-tiny instead
2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store
checking permissions...
screen recording: ok
accessibility: ok
2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-07T09:45:22.650600Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ true │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ ["Boosteroid"] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ disabled │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: https://github.com/screenpipe/screenpipe/releases
2026-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture
2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh
2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))
2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture
2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9
2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)
2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)
2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)
2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on [IP_ADDRESS]:3030
2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030
2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC
2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)
2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)
2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)
2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)
2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms
2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)
2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms
2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: "....", help: "https://www.osstatus.com?search=-25212" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app
2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)
2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)
2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)
2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)
2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some("Firefox"), source=Some("ui_scan")
2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames
2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted
2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted
2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted
tip: install a starter bundle of pipes:
screenpipe install https://screenpi.pe/start.json
2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)
2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames
2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted
2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
screenpipe login
2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames
2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted
2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted
2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)
2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)
2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)
2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)
2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)
2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)
2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)
2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)
2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted
2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted
2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)
2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)
2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)
2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)
2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)
2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)
2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
⌥⌘1
screenpipe"...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Thu May 7 09:44:56 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start\ndetected hardware tier: Mid\nwarning: parakeet is not supported on this platform, using whisper-tiny instead\n2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-07T09:45:22.650600Z 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 │ [\"Boosteroid\"] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\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-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture\n2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9\n2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)\n2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC\n2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)\n2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms\n2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)\n2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms\n2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: \"....\", help: \"https://www.osstatus.com?search=-25212\" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app\n2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)\n2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)\n2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)\n2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)\n2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some(\"Firefox\"), source=Some(\"ui_scan\")\n2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames\n2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted\n2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted\n2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n screenpipe install https://screenpi.pe/start.json\n\n2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)\n2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames\n2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted\n2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n screenpipe login\n\n2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames\n2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted\n2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted\n2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)\n2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)\n2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)\n2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)\n2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)\n2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)\n2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)\n2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)\n2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted\n2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted\n2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)\n2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)\n2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)\n2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)\n2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)\n2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)\n2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)","depth":4,"on_screen":true,"value":"Last login: Thu May 7 09:44:56 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start\ndetected hardware tier: Mid\nwarning: parakeet is not supported on this platform, using whisper-tiny instead\n2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-07T09:45:22.650600Z 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 │ [\"Boosteroid\"] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\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-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture\n2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9\n2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)\n2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC\n2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)\n2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms\n2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)\n2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms\n2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: \"....\", help: \"https://www.osstatus.com?search=-25212\" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app\n2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)\n2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)\n2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)\n2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)\n2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some(\"Firefox\"), source=Some(\"ui_scan\")\n2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames\n2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted\n2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted\n2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n screenpipe install https://screenpi.pe/start.json\n\n2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)\n2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames\n2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted\n2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n screenpipe login\n\n2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames\n2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted\n2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted\n2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)\n2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)\n2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)\n2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)\n2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)\n2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)\n2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)\n2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)\n2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted\n2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted\n2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)\n2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)\n2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)\n2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)\n2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)\n2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)\n2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.27227393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.36469415,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.36668882,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.45910904,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.46110374,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.55352396,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.5555186,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.64793885,"top":1.0,"width":0.0944149,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6499335,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7287234,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.49634308,"top":1.0,"width":0.027925532,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
8663384110706991852
|
3293112124529284469
|
idle
|
accessibility
|
NULL
|
Last login: Thu May 7 09:44:56 on ttys009
Poetry Last login: Thu May 7 09:44:56 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start
detected hardware tier: Mid
warning: parakeet is not supported on this platform, using whisper-tiny instead
2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store
checking permissions...
screen recording: ok
accessibility: ok
2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-07T09:45:22.650600Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ true │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ ["Boosteroid"] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ disabled │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: https://github.com/screenpipe/screenpipe/releases
2026-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture
2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh
2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))
2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture
2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9
2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)
2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)
2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)
2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on [IP_ADDRESS]:3030
2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030
2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC
2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)
2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)
2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)
2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)
2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms
2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)
2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms
2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: "....", help: "https://www.osstatus.com?search=-25212" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app
2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)
2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)
2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)
2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)
2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some("Firefox"), source=Some("ui_scan")
2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames
2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted
2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted
2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted
tip: install a starter bundle of pipes:
screenpipe install https://screenpi.pe/start.json
2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)
2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames
2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted
2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
screenpipe login
2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames
2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted
2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted
2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)
2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)
2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)
2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)
2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)
2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)
2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)
2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)
2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted
2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted
2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)
2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)
2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)
2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)
2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)
2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)
2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
⌥⌘1
screenpipe"...
|
505
|
NULL
|
NULL
|
NULL
|
|
508
|
21
|
26
|
2026-05-07T07:15:14.983133+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778138114983_m1.jpg...
|
iTerm2
|
screenpipe"
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Thu May 7 09:44:56 on ttys009
Poetry Last login: Thu May 7 09:44:56 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start
detected hardware tier: Mid
warning: parakeet is not supported on this platform, using whisper-tiny instead
2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store
checking permissions...
screen recording: ok
accessibility: ok
2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-07T09:45:22.650600Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ true │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ ["Boosteroid"] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ disabled │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: https://github.com/screenpipe/screenpipe/releases
2026-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture
2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh
2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))
2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture
2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9
2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)
2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)
2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)
2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on [IP_ADDRESS]:3030
2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030
2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC
2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)
2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)
2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)
2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)
2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms
2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)
2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms
2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: "....", help: "https://www.osstatus.com?search=-25212" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app
2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)
2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)
2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)
2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)
2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some("Firefox"), source=Some("ui_scan")
2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames
2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted
2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted
2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted
tip: install a starter bundle of pipes:
screenpipe install https://screenpi.pe/start.json
2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)
2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames
2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted
2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
screenpipe login
2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames
2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted
2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted
2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)
2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)
2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)
2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)
2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)
2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)
2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)
2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)
2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted
2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted
2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)
2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)
2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)
2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)
2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)
2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)
2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
⌥⌘1
screenpipe"...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Thu May 7 09:44:56 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start\ndetected hardware tier: Mid\nwarning: parakeet is not supported on this platform, using whisper-tiny instead\n2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-07T09:45:22.650600Z 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 │ [\"Boosteroid\"] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\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-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture\n2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9\n2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)\n2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC\n2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)\n2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms\n2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)\n2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms\n2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: \"....\", help: \"https://www.osstatus.com?search=-25212\" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app\n2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)\n2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)\n2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)\n2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)\n2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some(\"Firefox\"), source=Some(\"ui_scan\")\n2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames\n2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted\n2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted\n2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n screenpipe install https://screenpi.pe/start.json\n\n2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)\n2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames\n2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted\n2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n screenpipe login\n\n2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames\n2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted\n2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted\n2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)\n2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)\n2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)\n2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)\n2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)\n2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)\n2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)\n2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)\n2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted\n2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted\n2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)\n2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)\n2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)\n2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)\n2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)\n2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)\n2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)","depth":4,"on_screen":true,"value":"Last login: Thu May 7 09:44:56 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start\ndetected hardware tier: Mid\nwarning: parakeet is not supported on this platform, using whisper-tiny instead\n2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-07T09:45:22.650600Z 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 │ [\"Boosteroid\"] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\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-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture\n2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9\n2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)\n2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC\n2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)\n2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms\n2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)\n2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms\n2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: \"....\", help: \"https://www.osstatus.com?search=-25212\" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app\n2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)\n2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)\n2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)\n2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)\n2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some(\"Firefox\"), source=Some(\"ui_scan\")\n2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames\n2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted\n2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted\n2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n screenpipe install https://screenpi.pe/start.json\n\n2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)\n2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames\n2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted\n2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n screenpipe login\n\n2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames\n2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted\n2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted\n2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)\n2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)\n2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)\n2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)\n2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)\n2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)\n2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)\n2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)\n2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted\n2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted\n2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)\n2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)\n2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)\n2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)\n2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)\n2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)\n2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)\n2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.19722222,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.2013889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.39444444,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.3986111,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.59166664,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.59583336,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.7888889,"top":0.05888889,"width":0.19722222,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.79305553,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.95763886,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.4722222,"top":0.033333335,"width":0.058333334,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
8663384110706991852
|
3293112124529284469
|
idle
|
accessibility
|
NULL
|
Last login: Thu May 7 09:44:56 on ttys009
Poetry Last login: Thu May 7 09:44:56 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start
detected hardware tier: Mid
warning: parakeet is not supported on this platform, using whisper-tiny instead
2026-05-07T09:45:22.019771Z INFO screenpipe_engine::auth_key: api auth: key resolved via secret store
checking permissions...
screen recording: ok
accessibility: ok
2026-05-07T09:45:22.092624Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-07T09:45:22.622934Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-07T09:45:22.624626Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-07T09:45:22.625092Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-07T09:45:22.646090Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-07T09:45:22.646159Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-07T09:45:22.646404Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-07T09:45:22.646469Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-07T09:45:22.646500Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-07T09:45:22.646361Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-07T09:45:22.646531Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-07T09:45:22.649692Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-07T09:45:22.649928Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-07T09:45:22.650337Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-07T09:45:22.650421Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-07T09:45:22.650497Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-07T09:45:22.650578Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-07T09:45:22.650600Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ true │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ ["Boosteroid"] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
2026-05-07T09:45:22.652623Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ disabled │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: https://github.com/screenpipe/screenpipe/releases
2026-05-07T09:45:22.653069Z INFO screenpipe: starting UI event capture
2026-05-07T09:45:22.657316Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh
2026-05-07T09:45:22.658196Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))
2026-05-07T09:45:22.668066Z INFO screenpipe_engine::ui_recorder: Starting UI event capture
2026-05-07T09:45:22.684704Z INFO screenpipe_engine::ui_recorder: UI recording session started: fdb3b7a3-88d3-4983-9faf-3a493cf2f0d9
2026-05-07T09:45:22.684797Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)
2026-05-07T09:45:22.684847Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-06 06:45:22.684845 UTC to 2026-05-07 06:45:22.684845 UTC)
2026-05-07T09:45:22.685646Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)
2026-05-07T09:45:22.695659Z INFO screenpipe_engine::server: Server listening on [IP_ADDRESS]:3030
2026-05-07T09:45:22.708586Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030
2026-05-07T09:45:22.740589Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 154 frame entries, coverage from 2026-05-06 06:45:22.684845 UTC
2026-05-07T09:45:22.770981Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-05-07T09:45:22.771008Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.771054Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-05-07T09:45:22.811296Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)
2026-05-07T09:45:22.811328Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811340Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)
2026-05-07T09:45:22.811350Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)
2026-05-07T09:45:22.811366Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)
2026-05-07T09:45:23.497850Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 1 excluded)
2026-05-07T09:45:23.576837Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=155, dur=39ms
2026-05-07T09:45:23.594869Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 1 excluded)
2026-05-07T09:45:23.728324Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=156, dur=87ms
2026-05-07T09:45:25.114503Z WARN screenpipe_a11y::tree::macos_lines: lines: AXUIElementCopyParameterizedAttributeValue(AXLineForIndex) failed status=os::Status { raw: -25212, fcc: "....", help: "https://www.osstatus.com?search=-25212" } — first failure (further failures suppressed); search highlights will fall back to paragraph bbox on this app
2026-05-07T09:45:29.149038Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7681127700032315998, trigger=visual_change)
2026-05-07T09:45:48.802125Z INFO screenpipe_engine::meeting_detector: meeting v2: Idle -> Confirming (app=Firefox, signals=2)
2026-05-07T09:45:53.994026Z INFO screenpipe_engine::meeting_detector: meeting v2: Confirming -> Active (app=Firefox, signals=2, browser=true)
2026-05-07T09:45:53.994983Z INFO screenpipe_engine::meeting_detector: meeting v2: meeting started (id=1, app=Firefox, title=None)
2026-05-07T09:45:53.995269Z INFO screenpipe_engine::routes::meetings: meeting_status_changed: active=true, manual=false, active_id=Some(1), app=Some("Firefox"), source=Some("ui_scan")
2026-05-07T09:46:22.681313Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 77 eligible frames
2026-05-07T09:46:24.975724Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.6MB → 1.8MB (4.2x), 38 JPEGs deleted
2026-05-07T09:46:27.284414Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 5.7MB → 0.4MB (14.3x), 37 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T09:51:27.298006Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-07T09:56:27.307108Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-07T09:56:29.766853Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 29 frames, 4.6MB → 2.5MB (1.8x), 29 JPEGs deleted
2026-05-07T09:56:31.182378Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.5MB → 1.1MB (2.4x), 16 JPEGs deleted
tip: install a starter bundle of pipes:
screenpipe install https://screenpi.pe/start.json
2026-05-07T10:00:50.039083Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4913720669938969944, trigger=visual_change)
2026-05-07T10:01:31.184069Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 70 eligible frames
2026-05-07T10:01:33.701926Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 37 frames, 6.4MB → 2.7MB (2.4x), 37 JPEGs deleted
2026-05-07T10:01:35.921087Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 5.6MB → 1.7MB (3.3x), 31 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
screenpipe login
2026-05-07T10:06:35.921469Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 37 eligible frames
2026-05-07T10:06:37.286011Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 3.2MB → 1.1MB (3.0x), 18 JPEGs deleted
2026-05-07T10:06:38.611334Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 3.2MB → 0.7MB (4.3x), 17 JPEGs deleted
2026-05-07T10:07:10.923890Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-363038137104660743, trigger=click)
2026-05-07T10:07:54.763156Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=click)
2026-05-07T10:07:58.866469Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7750749190140780004, trigger=click)
2026-05-07T10:08:03.510124Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4602046684169633189, trigger=visual_change)
2026-05-07T10:08:39.088273Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3643569030250279342, trigger=visual_change)
2026-05-07T10:09:18.346872Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6569246041316117301, trigger=visual_change)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-07T10:10:36.954420Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4721988080886038618, trigger=visual_change)
2026-05-07T10:10:54.330626Z INFO screenpipe_engine::meeting_detector: meeting v2: Active -> Ending (no controls, app=Firefox, id=1, grace=300s)
2026-05-07T10:11:12.369084Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-8225140425134796296, trigger=visual_change)
2026-05-07T10:11:38.678230Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-07T10:11:40.024314Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 16 frames, 2.8MB → 1.0MB (2.9x), 16 JPEGs deleted
2026-05-07T10:11:40.843106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 2.0MB → 0.3MB (6.4x), 10 JPEGs deleted
2026-05-07T10:12:12.538283Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-7652725149678140352, trigger=click)
2026-05-07T10:12:16.550570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9173838423795606666, trigger=visual_change)
2026-05-07T10:12:31.745217Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:34.790862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:37.784752Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:40.806177Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:43.854881Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:12:59.015149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:14.166750Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:17.184510Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1669118135250037105, trigger=visual_change)
2026-05-07T10:13:34.773468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=click)
2026-05-07T10:13:44.486450Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6229566017341650404, trigger=visual_change)
2026-05-07T10:13:54.236529Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7077166956358270957, trigger=click)
2026-05-07T10:13:59.559230Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3980541844315414876, trigger=visual_change)
2026-05-07T10:14:11.809168Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6523625761174407917, trigger=click)
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
⌥⌘1
screenpipe"...
|
504
|
NULL
|
NULL
|
NULL
|
|
7714
|
343
|
13
|
2026-05-08T09:21:56.850565+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778232116850_m1.jpg...
|
Firefox
|
Jy 20493 smart instant nudge pre filtering by niko Jy 20493 smart instant nudge pre filtering by nikolaybiaivanov · Pull Request #12053 · jiminny/app — Work...
|
True
|
github.com/jiminny/app/pull/12053/changes
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 3 Q2 - Platform Team - Scrum Board Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -4,16 +4,17 @@445namespace Jiminny\Component\Nudge\Job;5namespace Jiminny\Component\Nudge\Job;667+use Carbon\Carbon;7use Illuminate\Bus\Queueable;8use Illuminate\Bus\Queueable;8use Illuminate\Contracts\Queue\ShouldQueue;9use Illuminate\Contracts\Queue\ShouldQueue;9-use Illuminate\Database\Eloquent\Builder;10use Illuminate\Foundation\Bus\Dispatchable;10use Illuminate\Foundation\Bus\Dispatchable;11use Illuminate\Queue\InteractsWithQueue;11use Illuminate\Queue\InteractsWithQueue;12use Illuminate\Queue\SerializesModels;12use Illuminate\Queue\SerializesModels;13use Illuminate\Support\Facades\Log;13use Illuminate\Support\Facades\Log;14use Jiminny\Component\Queue\Constants;14use Jiminny\Component\Queue\Constants;15use Jiminny\Models\Activity;15use Jiminny\Models\Activity;16use Jiminny\Models\Activity\Search;16use Jiminny\Models\Activity\Search;17+use Jiminny\Models\Activity\SearchFilter;17use Jiminny\Models\Nudge;18use Jiminny\Models\Nudge;18use Jiminny\Models\Team;19use Jiminny\Models\Team;1920@@ -34,37 +35,201 @@343535public function handle(): void36public function handle(): void36 {37 {37-/** @var Activity $activity */38+$activity = Activity::with(['user.group'])->uuid($this->activityUuid, false)->firstOrFail();38-$activity = Activity::with(['user'])->uuid($this->activityUuid, false)->firstOrFail();39-40-/** @var Team $team */41$team = Team::with(['users'])->findOrFail($activity->user->team_id);39$team = Team::with(['users'])->findOrFail($activity->user->team_id);424043- Log::info(__METHOD__ . " Running for team $team->id.", [44-'activity_id' => $activity->id,45-'activity_uuid' => $this->activityUuid,46-'team_id' => $team->id,47- ]);48-49$usersIds = $team->users->pluck('id')->toArray();41$usersIds = $team->users->pluck('id')->toArray();504251-$searchesWithImmediateNudges = Activity\Search::with(['nudges'])43+$searchesWithImmediateNudges = Activity\Search::with([44+'nudges' => fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY),45+'filters',46+ ])52 ->whereIn('user_id', $usersIds)47 ->whereIn('user_id', $usersIds)53- ->whereHas('nudges', function (Builder $query) {48+ ->whereHas('nudges', fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY))54-$query->where('frequency', Nudge::FREQ_INSTANTLY);49+ ->get();55- })->get();50+51+$totalSearches = $searchesWithImmediateNudges->count();52+$skippedCount = 0;53+54+$searchesWithImmediateNudges->each(function (Search $search) use ($activity, &$skippedCount): void {55+$matchResult = $this->activityMightMatchSearch($activity, $search);565657-$searchesWithImmediateNudges->each(function (Search $search): void {57+if (! $matchResult['matches']) {58-$search->nudges->each(function (Nudge $nudge): void {58+$skippedCount++;59-// Filter only nudges that are set to be sent instantly59+ Log::info('Pre-filter skipped nudge dispatch', [60-if ($nudge->frequency === Nudge::FREQ_INSTANTLY) {60+'activity_uuid' => $activity->getUuid(),61- Log::info("Dispatching ProcessNudgeSearchJob for nudge $nudge->id.");61+'search_id' => $search->getId(),62+'mismatched_filter' => $matchResult['mismatch_reason'],63+'filter_value' => $matchResult['filter_value'],64+ ]);626563- ProcessNudgeSearchJob::dispatch($nudge);66+return;67+ }646865- Log::info("ProcessNudgeSearchJob dispatched for nudge $nudge->id.");69+$search->nudges->each(fn ($nudge) => ProcessNudgeSearchJob::dispatch($nudge));66- }67- });68 });70 });71+72+if ($totalSearches > 0) {73+ Log::info('Nudge pre-filter results', [74+'activity_uuid' => $activity->getUuid(),75+'total_searches' => $totalSearches,76+'skipped' => $skippedCount,77+'dispatched' => $totalSearches - $skippedCount,78+'skip_rate' => round(($skippedCount / $totalSearches) * 100, 2) . '%',79+ ]);80+ }81+ }82+83+private function activityMightMatchSearch(Activity $activity, Search $search): array84+ {85+foreach ($search->filters as $filter) {86+$filterName = $filter->getFilterProperty();87+88+$result = match ($filterName) {89+'group_id' => $this->checkGroupId($activity, $filter),90+'user_id' => $this->checkUserId($activity, $filter),91+'channel_id' => $this->checkChannelId($activity, $filter),92+'provider_id' => $this->checkProviderId($activity, $filter),93+'category_id' => $this->checkCategoryId($activity, $filter),94+'min_duration' => $this->checkMinDuration($activity, $filter),95+'max_duration' => $this->checkMaxDuration($activity, $filter),96+'not_logged' => $this->checkNotLogged($activity, $filter),97+'only_recorded' => $this->checkOnlyRecorded($activity, $filter),98+'languages' => $this->checkLanguages($activity, $filter),99+'stage_id' => $this->checkStageId($activity, $filter),100+'start_date' => $this->checkStartDate($activity, $filter),101+'end_date' => $this->checkEndDate($activity, $filter),102+default => null, // Unknown filter - can't pre-check, assume might match103+ };104+105+if ($result === false) {106+return [107+'matches' => false,108+'mismatch_reason' => $filterName,109+'filter_value' => $filter->getFilterValue(),110+ ];111+ }112+ }113+114+return ['matches' => true];115+ }116+117+private function checkGroupId(Activity $activity, SearchFilter $filter): ?bool118+ {119+$groupUuid = $activity->user->getGroup()?->getUuid();120+if ($groupUuid === null) {121+return null;122+ }123+124+return $filter->getFilterValue() === $groupUuid ? null : false;125+ }126+127+private function checkUserId(Activity $activity, SearchFilter $filter): ?bool128+ {129+return $filter->getFilterValue() === $activity->user->getUuid() ? null : false;130+ }131+132+private function checkChannelId(Activity $activity, SearchFilter $filter): ?bool133+ {134+return $filter->getFilterValue() === $activity->getType() ? null : false;135+ }136+137+private function checkProviderId(Activity $activity, SearchFilter $filter): ?bool138+ {139+return $filter->getFilterValue() === $activity->getProvider() ? null : false;140+ }141+142+private function checkCategoryId(Activity $activity, SearchFilter $filter): ?bool143+ {144+$categoryId = $activity->getCategory()?->getUuid();145+if ($categoryId === null) {146+return null;147+ }148+149+return $filter->getFilterValue() === $categoryId ? null : false;150+ }151+152+private function checkMinDuration(Activity $activity, SearchFilter $filter): ?bool153+ {154+return $activity->getDuration() >= (float) $filter->getFilterValue() ? null : false;155+ }156+157+private function checkMaxDuration(Activity $activity, SearchFilter $filter): ?bool158+ {159+return $activity->getDuration() <= (float) $filter->getFilterValue() ? null : false;160+ }161+162+private function checkNotLogged(Activity $activity, SearchFilter $filter): ?bool163+ {164+if (! $filter->getFilterValue()) {165+return null;166+ }167+168+$isLogged = $activity->getCrmProviderId() !== null;169+$isInternal = $activity->isInternal();170+171+return (! $isLogged || $isInternal) ? null : false;172+ }173+174+private function checkOnlyRecorded(Activity $activity, SearchFilter $filter): ?bool175+ {176+$filterValue = (int) $filter->getFilterValue();177+$hasRecording = $activity->recording_state !== Activity::RECORDING_OFF;178+179+return match ($filterValue) {180+1 => $hasRecording ? null : false, // Only recorded181+2 => ! $hasRecording ? null : false, // Only non-recorded182+default => null,183+ };184+ }185+186+private function checkStageId(Activity $activity, SearchFilter $filter): ?bool187+ {188+$stageId = $activity->getStage()?->getUuid();189+if ($stageId === null) {190+return null; // No stage, let ES handle191+ }192+193+return $filter->getFilterValue() === $stageId ? null : false;194+ }195+196+private function checkStartDate(Activity $activity, SearchFilter $filter): ?bool197+ {198+$startTime = $activity->getActualStartTime();199+if ($startTime === null) {200+return null;201+ }202+203+$filterDate = Carbon::parse($filter->getFilterValue());204+205+return $startTime->gte($filterDate) ? null : false;206+ }207+208+private function checkEndDate(Activity $activity, SearchFilter $filter): ?bool209+ {210+$endTime = $activity->getActualEndTime();211+if ($endTime === null) {212+return null;213+ }214+215+$filterDate = Carbon::parse($filter->getFilterValue())->endOfDay();216+217+return $endTime->lte($filterDate) ? null : false;218+ }219+220+private function checkLanguages(Activity $activity, SearchFilter $filter): ?bool221+ {222+$activityLanguage = $activity->getLanguageCode();223+if ($activityLanguage === null) {224+return null;225+ }226+227+// Filter values are always base language codes (e.g., 'en', 'fr').228+// Extract base code from activity locale (e.g., en_GB -> en) to match ES query behavior.229+// See LanguageFilterDefinition::getQueries() which uses regex: $language . '_[a-z]{2}'230+$activityLangCode = explode('_', $activityLanguage)[0];231+$filterLanguage = $filter->getFilterValue();232+233+return $activityLangCode === $filterLanguage ? null : false;69 }234 }70}235}</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 20493 smart instant nudge pre filtering by niko</tabTitle>” with “<selection>@@ -4,16 +4,17 @@445namespace Jiminny\Component\Nudge\Job;5namespace Jiminny\Component\Nudge\Job;667+use Carbon\Carbon;7use Illuminate\Bus\Queueable;8use Illuminate\Bus\Queueable;8use Illuminate\Contracts\Queue\ShouldQueue;9use Illuminate\Contracts\Queue\ShouldQueue;9-use Illuminate\Database\Eloquent\Builder;10use Illuminate\Foundation\Bus\Dispatchable;10use Illuminate\Foundation\Bus\Dispatchable;11use Illuminate\Queue\InteractsWithQueue;11use Illuminate\Queue\InteractsWithQueue;12use Illuminate\Queue\SerializesModels;12use Illuminate\Queue\SerializesModels;13use Illuminate\Support\Facades\Log;13use Illuminate\Support\Facades\Log;14use Jiminny\Component\Queue\Constants;14use Jiminny\Component\Queue\Constants;15use Jiminny\Models\Activity;15use Jiminny\Models\Activity;16use Jiminny\Models\Activity\Search;16use Jiminny\Models\Activity\Search;17+use Jiminny\Models\Activity\SearchFilter;17use Jiminny\Models\Nudge;18use Jiminny\Models\Nudge;18use Jiminny\Models\Team;19use Jiminny\Models\Team;1920@@ -34,37 +35,201 @@343535public function handle(): void36public function handle(): void36 {37 {37-/** @var Activity $activity */38+$activity = Activity::with(['user.group'])->uuid($this->activityUuid, false)->firstOrFail();38-$activity = Activity::with(['user'])->uuid($this->activityUuid, false)->firstOrFail();39-40-/** @var Team $team */41$team = Team::with(['users'])->findOrFail($activity->user->team_id);39$team = Team::with(['users'])->findOrFail($activity->user->team_id);424043- Log::info(__METHOD__ . " Running for team $team->id.", [44-'activity_id' => $activity->id,45-'activity_uuid' => $this->activityUuid,46-'team_id' => $team->id,47- ]);48-49$usersIds = $team->users->pluck('id')->toArray();41$usersIds = $team->users->pluck('id')->toArray();504251-$searchesWithImmediateNudges = Activity\Search::with(['nudges'])43+$searchesWithImmediateNudges = Activity\Search::with([44+'nudges' => fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY),45+'filters',46+ ])52 ->whereIn('user_id', $usersIds)47 ->whereIn('user_id', $usersIds)53- ->whereHas('nudges', function (Builder $query) {48+ ->whereHas('nudges', fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY))54-$query->where('frequency', Nudge::FREQ_INSTANTLY);49+ ->get();55- })->get();50+51+$totalSearches = $searchesWithImmediateNudges->count();52+$skippedCount = 0;53+54+$searchesWithImmediateNudges->each(function (Search $search) use ($activity, &$skippedCount): void {55+$matchResult = $this->activityMightMatchSearch($activity, $search);565657-$searchesWithImmediateNudges->each(function (Search $search): void {57+if (! $matchResult['matches']) {58-$search->nudges->each(function (Nudge $nudge): void {58+$skippedCount++;59-// Filter only nudges that are set to be sent instantly59+ Log::info('Pre-filter skipped nudge dispatch', [60-if ($nudge->frequency === Nudge::FREQ_INSTANTLY) {60+'activity_uuid' => $activity->getUuid(),61- Log::info("Dispatching ProcessNudgeSearchJob for nudge $nudge->id.");61+'search_id' => $search->getId(),62+'mismatched_filter' => $matchResult['mismatch_reason'],63+'filter_value' => $matchResult['filter_value'],64+ ]);626563- ProcessNudgeSearchJob::dispatch($nudge);66+return;67+ }646865- Log::info("ProcessNudgeSearchJob dispatched for nudge $nudge->id.");69+$search->nudges->each(fn ($nudge) => ProcessNudgeSearchJob::dispatch($nudge));66- }67- });68 });70 });71+72+if ($totalSearches > 0) {73+ Log::info('Nudge pre-filter results', [74+'activity_uuid' => $activity->getUuid(),75+'total_searches' => $totalSearches,76+'skipped' => $skippedCount,77+'dispatched' => $totalSearches - $skippedCount,78+'skip_rate' => round(($skippedCount / $totalSearches) * 100, 2) . '%',79+ ]);80+ }81+ }82+83+private function activityMightMatchSearch(Activity $activity, Search $search): array84+ {85+foreach ($search->filters as $filter) {86+$filterName = $filter->getFilterProperty();87+88+$result = match ($filterName) {89+'group_id' => $this->checkGroupId($activity, $filter),90+'user_id' => $this->checkUserId($activity, $filter),91+'channel_id' => $this->checkChannelId($activity, $filter),92+'provider_id' => $this->checkProviderId($activity, $filter),93+'category_id' => $this->checkCategoryId($activity, $filter),94+'min_duration' => $this->checkMinDuration($activity, $filter),95+'max_duration' => $this->checkMaxDuration($activity, $filter),96+'not_logged' => $this->checkNotLogged($activity, $filter),97+'only_recorded' => $this->checkOnlyRecorded($activity, $filter),98+'languages' => $this->checkLanguages($activity, $filter),99+'stage_id' => $this->checkStageId($activity, $filter),100+'start_date' => $this->checkStartDate($activity, $filter),101+'end_date' => $this->checkEndDate($activity, $filter),102+default => null, // Unknown filter - can't pre-check, assume might match103+ };104+105+if ($result === false) {106+return [107+'matches' => false,108+'mismatch_reason' => $filterName,109+'filter_value' => $filter->getFilterValue(),110+ ];111+ }112+ }113+114+return ['matches' => true];115+ }116+117+private function checkGroupId(Activity $activity, SearchFilter $filter): ?bool118+ {119+$groupUuid = $activity->user->getGroup()?->getUuid();120+if ($groupUuid === null) {121+return null;122+ }123+124+return $filter->getFilterValue() === $groupUuid ? null : false;125+ }126+127+private function checkUserId(Activity $activity, SearchFilter $filter): ?bool128+ {129+return $filter->getFilterValue() === $activity->user->getUuid() ? null : false;130+ }131+132+private function checkChannelId(Activity $activity, SearchFilter $filter): ?bool133+ {134+return $filter->getFilterValue() === $activity->getType() ? null : false;135+ }136+137+private function checkProviderId(Activity $activity, SearchFilter $filter): ?bool138+ {139+return $filter->getFilterValue() === $activity->getProvider() ? null : false;140+ }141+142+private function checkCategoryId(Activity $activity, SearchFilter $filter): ?bool143+ {144+$categoryId = $activity->getCategory()?->getUuid();145+if ($categoryId === null) {146+return null;147+ }148+149+return $filter->getFilterValue() === $categoryId ? null : false;150+ }151+152+private function checkMinDuration(Activity $activity, SearchFilter $filter): ?bool153+ {154+return $activity->getDuration() >= (float) $filter->getFilterValue() ? null : false;155+ }156+157+private function checkMaxDuration(Activity $activity, SearchFilter $filter): ?bool158+ {159+return $activity->getDuration() <= (float) $filter->getFilterValue() ? null : false;160+ }161+162+private function checkNotLogged(Activity $activity, SearchFilter $filter): ?bool163+ {164+if (! $filter->getFilterValue()) {165+return null;166+ }167+168+$isLogged = $activity->getCrmProviderId() !== null;169+$isInternal = $activity->isInternal();170+171+return (! $isLogged || $isInternal) ? null : false;172+ }173+174+private function checkOnlyRecorded(Activity $activity, SearchFilter $filter): ?bool175+ {176+$filterValue = (int) $filter->getFilterValue();177+$hasRecording = $activity->recording_state !== Activity::RECORDING_OFF;178+179+return match ($filterValue) {180+1 => $hasRecording ? null : false, // Only recorded181+2 => ! $hasRecording ? null : false, // Only non-recorded182+default => null,183+ };184+ }185+186+private function checkStageId(Activity $activity, SearchFilter $filter): ?bool187+ {188+$stageId = $activity->getStage()?->getUuid();189+if ($stageId === null) {190+return null; // No stage, let ES handle191+ }192+193+return $filter->getFilterValue() === $stageId ? null : false;194+ }195+196+private function checkStartDate(Activity $activity, SearchFilter $filter): ?bool197+ {198+$startTime = $activity->getActualStartTime();199+if ($startTime === null) {200+return null;201+ }202+203+$filterDate = Carbon::parse($filter->getFilterValue());204+205+return $startTime->gte($filterDate) ? null : false;206+ }207+208+private function checkEndDate(Activity $activity, SearchFilter $filter): ?bool209+ {210+$endTime = $activity->getActualEndTime();211+if ($endTime === null) {212+return null;213+ }214+215+$filterDate = Carbon::parse($filter->getFilterValue())->endOfDay();216+217+return $endTime->lte($filterDate) ? null : false;218+ }219+220+private function checkLanguages(Activity $activity, SearchFilter $filter): ?bool221+ {222+$activityLanguage = $activity->getLanguageCode();223+if ($activityLanguage === null) {224+return null;225+ }226+227+// Filter values are always base language codes (e.g., 'en', 'fr').228+// Extract base code from activity locale (e.g., en_GB -> en) to match ES query behavior.229+// See LanguageFilterDefinition::getQueries() which uses regex: $language . '_[a-z]{2}'230+$activityLangCode = explode('_', $activityLanguage)[0];231+$filterLanguage = $filter->getFilterValue();232+233+return $activityLangCode === $filterLanguage ? null : false;69 }234 }70}235}</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
Gemini said
Gemini said
This code selection introduces a
pre-filtering mechanism
to the
Jiminny\Component\Nudge\Job
namespace. The primary goal is to optimize performance by validating an activity against search criteria in-memory before dispatching costly background jobs.
Core Functionality Changes
Core Functionality Changes
Selective Loading:
The
handle()
method now eager-loads
user.group
for activities and specifically filters for
FREQ_INSTANTLY
nudges and their associated search filters.
Pre-Dispatch Validation:
Instead of dispatching jobs for every instant nudge, the system now calls
activityMightMatchSearch()
.
Short-Circuiting:
If an activity fails a pre-filter check (e.g., mismatched user ID or duration), the job dispatch is skipped, and the event is logged with the specific mismatch reason.
Performance Metrics:
Adds summary logging at the end of the process to track:
Total searches processed.
Number of skipped dispatches.
The "Skip Rate" percentage.
Implemented Filter Checks
Implemented Filter Checks
The logic includes a
match
expression to validate various activity attributes against
SearchFilter
values:
Identity & Metadata:
Matches for
group_id
,
user_id
,
channel_id
, and
provider_id
.
Temporal & Duration:
* Validates
min_duration
and
max_duration
.
Checks
start_date
and
end_date
using Carbon parsing.
Activity State:
*
Logging:
Determines if an activity is logged to a CRM or is internal via
checkNotLogged
.
Recording:
Uses
checkOnlyRecorded
to filter based on whether a recording exists.
Categorization:
Checks for
category_id
,
stage_id
, and
languages
.
Note:
The language check specifically extracts base codes (e.g.,
en
from
en_GB
) to align with Elasticsearch behavior.
Logic Design
Logic Design
Nullable Returns:
Filter methods return
null
if a match is possible (or cannot be determined), and
false
only when a definitive mismatch is found.
Safe Fallback:
If a filter type is unknown (
default
), the system assumes a match and proceeds to dispatch, ensuring no false negatives.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said what is the logic behind diff. Act as code reviewer. First review the changes then explain it and then evaluate. Try to find potential issues and bottlenecks
You said
what is the logic behind diff. Act as code reviewer. First review the changes then explain it and then evaluate. Try to find potential issues and bottlenecks
Expand
Listen
Show more options
Show thinking
Gemini said
Gemini said
Here is a review of the changes provided in the diff, broken down by your requested structure.
1. Review of Changes
1. Review of Changes
This PR refactors the
ProcessNudgeSearchJob
dispatching mechanism within the
handle()
method.
Query Optimization:
Eager loads necessary relationships (
user.group
,
filters
) and scopes the
nudges
relationship at the database level to only fetch
FREQ_INSTANTLY
records.
In-Memory Filtering:
Introduces a pre-filtering mechanism (
activityMightMatchSearch
) that checks the
Activity
against
SearchFilter
criteria before deciding to dispatch a job.
Helper Methods:
Adds 13 private
check*
methods to handle the specific comparison logic for different filter types (e.g., duration, dates, categories, stages).
Observability:
Adds structured logging to record exactly why a nudge was skipped and outputs a summary report (total, skipped, dispatched, skip rate) at the end of the execution.
2. Explanation of Logic
2. Explanation of Logic
The core philosophy of this change is
"veto-based short-circuiting"
.
Previously, the job fetched all searches with instant nudges for a team's users and blindly dispatched a queue job for every single one. The heavy lifting of deciding if the activity actually matched the search was likely deferred to the queue worker and Elasticsearch.
Now, the code evaluates the filters in the current process:
It iterates through each
Search
and its associated
SearchFilter
s.
It routes the filter to a specific
check*
method using a
match
expression based on the filter's property name.
The Veto:
The
check*
methods are designed to return
false
only if there is an absolute mismatch
(e.g., the filter requires a minimum duration of 10, but the activity is 5).
The Pass:
If the filter matches, or if the activity lacks the data needed to make a firm decision (e.g., no stage is assigned, or the filter type is unrecognized), the method returns
null
. This acts as a pass, delegating the final strict evaluation to Elasticsearch later in the pipeline.
If any filter returns
false
, the search is skipped, saving a queue dispatch.
3. Evaluation
3. Evaluation
Overall, this is a
highly effective performance optimization
.
Pros:
It significantly reduces queue bloat. By filtering out obvious mismatches in-memory, you save the overhead of serializing, dispatching, picking up, and processing jobs that are destined to fail or do nothing. The use of
match
makes the routing exceptionally clean, and the nullable return design is a smart way to avoid false negatives.
Cons/Trade-offs:
You are trading background queue worker time for a slight increase in synchronous memory and CPU usage on the current job. However, queue I/O is almost always more expensive than simple in-memory comparisons, making this a worthwhile trade.
4. Potential Issues & Bottlenecks
4. Potential Issues & Bottlenecks
While the logic is sound, there are a few architectural bottlenecks and risks introduced or maintained in this diff:
Potential N+1 Query / Lazy Loading Issues:
In the
handle
method, the activity is loaded with
Activity::with(['user.group'])
. However, inside your new
check*
methods, you are calling:
$activity->getCategory()?->getUuid()
$activity->getStage()?->getUuid()
If
category
and
stage
are Eloquent relationships and are not eager-loaded on the original
$activity
model, calling these methods inside a loop of
$totalSearches
will trigger lazy-loaded database queries.
Fix:
Update line 38 to:
$activity = Activity::with(['user.group', 'category', 'stage'])->...
Massive Memory Consumption (Pre-existing but critical):
Lines 39-41:
PHP
Download code
Copy code
$team
= Team::with([
'users'
])->findOrFail(
$activity
->user->team_id);
$usersIds
=
$team
->users->pluck(
'id'
)->toArray();
If a team has thousands of users,
Team::with(['users'])
hydrates thousands of full Eloquent User models into memory just to extract their IDs.
Fix:
Bypass hydrating the models entirely by querying the relationship directly:
$usersIds = $team->users()->pluck('id')->toArray();
Repeated Carbon Parsing in Loops:
In
checkStartDate
and
checkEndDate
, you parse the filter date:
Carbon::parse($filter->getFilterValue())
. If the same date filter applies to multiple searches, Carbon is being instantiated repeatedly in the loop. While Carbon is relatively fast, doing this hundreds of times adds unnecessary CPU cycles.
Fix:
This is a minor nitpick, but if performance is the absolute goal, you could memoize/cache the parsed filter values within the job.
Loose Type Comparisons:
In methods like
checkChannelId
or
checkLanguages
, you are using strict equality (
===
). Ensure that
$filter->getFilterValue()
(which is typically returned as a string from a database payload) matches the exact type returned by
$activity->getType()
or
$activityLangCode
. If one is an integer
1
and the other is a string
"1"
, the strict check will return
false
, incorrectly preventing the nudge from sending.
Good response
Bad response
Redo...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"on_screen":true,"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,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Illuminate\\Queue\\MaxAttemptsExceededException: Jiminny\\Jobs\\Activity\\DeleteTeamChurnData has been attempted too many times. — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Illuminate\\Queue\\MaxAttemptsExceededException: Jiminny\\Jobs\\Activity\\DeleteTeamChurnData has been attempted too many times. — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Userpilot | Ask Jiminny Report Generated","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Userpilot | Ask Jiminny Report Generated","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Problem loading page","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Problem loading page","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Search the CRM - HubSpot docs","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search the CRM - HubSpot docs","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Dashboards | Datadog","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dashboards | Datadog","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"AI Features | Datadog","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AI Features | Datadog","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20493 smart instant nudge pre filtering by nikolaybiaivanov · Pull Request #12053 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jy 20493 smart instant nudge pre filtering by nikolaybiaivanov · Pull Request #12053 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"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.0,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0034722222,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.02673611,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.05,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Chat","depth":12,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"on_screen":true,"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,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"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 20493 smart instant nudge pre filtering by niko</tabTitle>” with “<selection>@@ -4,16 +4,17 @@445namespace Jiminny\\Component\\Nudge\\Job;5namespace Jiminny\\Component\\Nudge\\Job;667+use Carbon\\Carbon;7use Illuminate\\Bus\\Queueable;8use Illuminate\\Bus\\Queueable;8use Illuminate\\Contracts\\Queue\\ShouldQueue;9use Illuminate\\Contracts\\Queue\\ShouldQueue;9-use Illuminate\\Database\\Eloquent\\Builder;10use Illuminate\\Foundation\\Bus\\Dispatchable;10use Illuminate\\Foundation\\Bus\\Dispatchable;11use Illuminate\\Queue\\InteractsWithQueue;11use Illuminate\\Queue\\InteractsWithQueue;12use Illuminate\\Queue\\SerializesModels;12use Illuminate\\Queue\\SerializesModels;13use Illuminate\\Support\\Facades\\Log;13use Illuminate\\Support\\Facades\\Log;14use Jiminny\\Component\\Queue\\Constants;14use Jiminny\\Component\\Queue\\Constants;15use Jiminny\\Models\\Activity;15use Jiminny\\Models\\Activity;16use Jiminny\\Models\\Activity\\Search;16use Jiminny\\Models\\Activity\\Search;17+use Jiminny\\Models\\Activity\\SearchFilter;17use Jiminny\\Models\\Nudge;18use Jiminny\\Models\\Nudge;18use Jiminny\\Models\\Team;19use Jiminny\\Models\\Team;1920@@ -34,37 +35,201 @@343535public function handle(): void36public function handle(): void36 {37 {37-/** @var Activity $activity */38+$activity = Activity::with(['user.group'])->uuid($this->activityUuid, false)->firstOrFail();38-$activity = Activity::with(['user'])->uuid($this->activityUuid, false)->firstOrFail();39-40-/** @var Team $team */41$team = Team::with(['users'])->findOrFail($activity->user->team_id);39$team = Team::with(['users'])->findOrFail($activity->user->team_id);424043- Log::info(__METHOD__ . " Running for team $team->id.", [44-'activity_id' => $activity->id,45-'activity_uuid' => $this->activityUuid,46-'team_id' => $team->id,47- ]);48-49$usersIds = $team->users->pluck('id')->toArray();41$usersIds = $team->users->pluck('id')->toArray();504251-$searchesWithImmediateNudges = Activity\\Search::with(['nudges'])43+$searchesWithImmediateNudges = Activity\\Search::with([44+'nudges' => fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY),45+'filters',46+ ])52 ->whereIn('user_id', $usersIds)47 ->whereIn('user_id', $usersIds)53- ->whereHas('nudges', function (Builder $query) {48+ ->whereHas('nudges', fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY))54-$query->where('frequency', Nudge::FREQ_INSTANTLY);49+ ->get();55- })->get();50+51+$totalSearches = $searchesWithImmediateNudges->count();52+$skippedCount = 0;53+54+$searchesWithImmediateNudges->each(function (Search $search) use ($activity, &$skippedCount): void {55+$matchResult = $this->activityMightMatchSearch($activity, $search);565657-$searchesWithImmediateNudges->each(function (Search $search): void {57+if (! $matchResult['matches']) {58-$search->nudges->each(function (Nudge $nudge): void {58+$skippedCount++;59-// Filter only nudges that are set to be sent instantly59+ Log::info('Pre-filter skipped nudge dispatch', [60-if ($nudge->frequency === Nudge::FREQ_INSTANTLY) {60+'activity_uuid' => $activity->getUuid(),61- Log::info("Dispatching ProcessNudgeSearchJob for nudge $nudge->id.");61+'search_id' => $search->getId(),62+'mismatched_filter' => $matchResult['mismatch_reason'],63+'filter_value' => $matchResult['filter_value'],64+ ]);626563- ProcessNudgeSearchJob::dispatch($nudge);66+return;67+ }646865- Log::info("ProcessNudgeSearchJob dispatched for nudge $nudge->id.");69+$search->nudges->each(fn ($nudge) => ProcessNudgeSearchJob::dispatch($nudge));66- }67- });68 });70 });71+72+if ($totalSearches > 0) {73+ Log::info('Nudge pre-filter results', [74+'activity_uuid' => $activity->getUuid(),75+'total_searches' => $totalSearches,76+'skipped' => $skippedCount,77+'dispatched' => $totalSearches - $skippedCount,78+'skip_rate' => round(($skippedCount / $totalSearches) * 100, 2) . '%',79+ ]);80+ }81+ }82+83+private function activityMightMatchSearch(Activity $activity, Search $search): array84+ {85+foreach ($search->filters as $filter) {86+$filterName = $filter->getFilterProperty();87+88+$result = match ($filterName) {89+'group_id' => $this->checkGroupId($activity, $filter),90+'user_id' => $this->checkUserId($activity, $filter),91+'channel_id' => $this->checkChannelId($activity, $filter),92+'provider_id' => $this->checkProviderId($activity, $filter),93+'category_id' => $this->checkCategoryId($activity, $filter),94+'min_duration' => $this->checkMinDuration($activity, $filter),95+'max_duration' => $this->checkMaxDuration($activity, $filter),96+'not_logged' => $this->checkNotLogged($activity, $filter),97+'only_recorded' => $this->checkOnlyRecorded($activity, $filter),98+'languages' => $this->checkLanguages($activity, $filter),99+'stage_id' => $this->checkStageId($activity, $filter),100+'start_date' => $this->checkStartDate($activity, $filter),101+'end_date' => $this->checkEndDate($activity, $filter),102+default => null, // Unknown filter - can't pre-check, assume might match103+ };104+105+if ($result === false) {106+return [107+'matches' => false,108+'mismatch_reason' => $filterName,109+'filter_value' => $filter->getFilterValue(),110+ ];111+ }112+ }113+114+return ['matches' => true];115+ }116+117+private function checkGroupId(Activity $activity, SearchFilter $filter): ?bool118+ {119+$groupUuid = $activity->user->getGroup()?->getUuid();120+if ($groupUuid === null) {121+return null;122+ }123+124+return $filter->getFilterValue() === $groupUuid ? null : false;125+ }126+127+private function checkUserId(Activity $activity, SearchFilter $filter): ?bool128+ {129+return $filter->getFilterValue() === $activity->user->getUuid() ? null : false;130+ }131+132+private function checkChannelId(Activity $activity, SearchFilter $filter): ?bool133+ {134+return $filter->getFilterValue() === $activity->getType() ? null : false;135+ }136+137+private function checkProviderId(Activity $activity, SearchFilter $filter): ?bool138+ {139+return $filter->getFilterValue() === $activity->getProvider() ? null : false;140+ }141+142+private function checkCategoryId(Activity $activity, SearchFilter $filter): ?bool143+ {144+$categoryId = $activity->getCategory()?->getUuid();145+if ($categoryId === null) {146+return null;147+ }148+149+return $filter->getFilterValue() === $categoryId ? null : false;150+ }151+152+private function checkMinDuration(Activity $activity, SearchFilter $filter): ?bool153+ {154+return $activity->getDuration() >= (float) $filter->getFilterValue() ? null : false;155+ }156+157+private function checkMaxDuration(Activity $activity, SearchFilter $filter): ?bool158+ {159+return $activity->getDuration() <= (float) $filter->getFilterValue() ? null : false;160+ }161+162+private function checkNotLogged(Activity $activity, SearchFilter $filter): ?bool163+ {164+if (! $filter->getFilterValue()) {165+return null;166+ }167+168+$isLogged = $activity->getCrmProviderId() !== null;169+$isInternal = $activity->isInternal();170+171+return (! $isLogged || $isInternal) ? null : false;172+ }173+174+private function checkOnlyRecorded(Activity $activity, SearchFilter $filter): ?bool175+ {176+$filterValue = (int) $filter->getFilterValue();177+$hasRecording = $activity->recording_state !== Activity::RECORDING_OFF;178+179+return match ($filterValue) {180+1 => $hasRecording ? null : false, // Only recorded181+2 => ! $hasRecording ? null : false, // Only non-recorded182+default => null,183+ };184+ }185+186+private function checkStageId(Activity $activity, SearchFilter $filter): ?bool187+ {188+$stageId = $activity->getStage()?->getUuid();189+if ($stageId === null) {190+return null; // No stage, let ES handle191+ }192+193+return $filter->getFilterValue() === $stageId ? null : false;194+ }195+196+private function checkStartDate(Activity $activity, SearchFilter $filter): ?bool197+ {198+$startTime = $activity->getActualStartTime();199+if ($startTime === null) {200+return null;201+ }202+203+$filterDate = Carbon::parse($filter->getFilterValue());204+205+return $startTime->gte($filterDate) ? null : false;206+ }207+208+private function checkEndDate(Activity $activity, SearchFilter $filter): ?bool209+ {210+$endTime = $activity->getActualEndTime();211+if ($endTime === null) {212+return null;213+ }214+215+$filterDate = Carbon::parse($filter->getFilterValue())->endOfDay();216+217+return $endTime->lte($filterDate) ? null : false;218+ }219+220+private function checkLanguages(Activity $activity, SearchFilter $filter): ?bool221+ {222+$activityLanguage = $activity->getLanguageCode();223+if ($activityLanguage === null) {224+return null;225+ }226+227+// Filter values are always base language codes (e.g., 'en', 'fr').228+// Extract base code from activity locale (e.g., en_GB -> en) to match ES query behavior.229+// See LanguageFilterDefinition::getQueries() which uses regex: $language . '_[a-z]{2}'230+$activityLangCode = explode('_', $activityLanguage)[0];231+$filterLanguage = $filter->getFilterValue();232+233+return $activityLangCode === $filterLanguage ? null : false;69 }234 }70}235}</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,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>Jy 20493 smart instant nudge pre filtering by niko</tabTitle>” with “<selection>@@ -4,16 +4,17 @@445namespace Jiminny\\Component\\Nudge\\Job;5namespace Jiminny\\Component\\Nudge\\Job;667+use Carbon\\Carbon;7use Illuminate\\Bus\\Queueable;8use Illuminate\\Bus\\Queueable;8use Illuminate\\Contracts\\Queue\\ShouldQueue;9use Illuminate\\Contracts\\Queue\\ShouldQueue;9-use Illuminate\\Database\\Eloquent\\Builder;10use Illuminate\\Foundation\\Bus\\Dispatchable;10use Illuminate\\Foundation\\Bus\\Dispatchable;11use Illuminate\\Queue\\InteractsWithQueue;11use Illuminate\\Queue\\InteractsWithQueue;12use Illuminate\\Queue\\SerializesModels;12use Illuminate\\Queue\\SerializesModels;13use Illuminate\\Support\\Facades\\Log;13use Illuminate\\Support\\Facades\\Log;14use Jiminny\\Component\\Queue\\Constants;14use Jiminny\\Component\\Queue\\Constants;15use Jiminny\\Models\\Activity;15use Jiminny\\Models\\Activity;16use Jiminny\\Models\\Activity\\Search;16use Jiminny\\Models\\Activity\\Search;17+use Jiminny\\Models\\Activity\\SearchFilter;17use Jiminny\\Models\\Nudge;18use Jiminny\\Models\\Nudge;18use Jiminny\\Models\\Team;19use Jiminny\\Models\\Team;1920@@ -34,37 +35,201 @@343535public function handle(): void36public function handle(): void36 {37 {37-/** @var Activity $activity */38+$activity = Activity::with(['user.group'])->uuid($this->activityUuid, false)->firstOrFail();38-$activity = Activity::with(['user'])->uuid($this->activityUuid, false)->firstOrFail();39-40-/** @var Team $team */41$team = Team::with(['users'])->findOrFail($activity->user->team_id);39$team = Team::with(['users'])->findOrFail($activity->user->team_id);424043- Log::info(__METHOD__ . " Running for team $team->id.", [44-'activity_id' => $activity->id,45-'activity_uuid' => $this->activityUuid,46-'team_id' => $team->id,47- ]);48-49$usersIds = $team->users->pluck('id')->toArray();41$usersIds = $team->users->pluck('id')->toArray();504251-$searchesWithImmediateNudges = Activity\\Search::with(['nudges'])43+$searchesWithImmediateNudges = Activity\\Search::with([44+'nudges' => fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY),45+'filters',46+ ])52 ->whereIn('user_id', $usersIds)47 ->whereIn('user_id', $usersIds)53- ->whereHas('nudges', function (Builder $query) {48+ ->whereHas('nudges', fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY))54-$query->where('frequency', Nudge::FREQ_INSTANTLY);49+ ->get();55- })->get();50+51+$totalSearches = $searchesWithImmediateNudges->count();52+$skippedCount = 0;53+54+$searchesWithImmediateNudges->each(function (Search $search) use ($activity, &$skippedCount): void {55+$matchResult = $this->activityMightMatchSearch($activity, $search);565657-$searchesWithImmediateNudges->each(function (Search $search): void {57+if (! $matchResult['matches']) {58-$search->nudges->each(function (Nudge $nudge): void {58+$skippedCount++;59-// Filter only nudges that are set to be sent instantly59+ Log::info('Pre-filter skipped nudge dispatch', [60-if ($nudge->frequency === Nudge::FREQ_INSTANTLY) {60+'activity_uuid' => $activity->getUuid(),61- Log::info("Dispatching ProcessNudgeSearchJob for nudge $nudge->id.");61+'search_id' => $search->getId(),62+'mismatched_filter' => $matchResult['mismatch_reason'],63+'filter_value' => $matchResult['filter_value'],64+ ]);626563- ProcessNudgeSearchJob::dispatch($nudge);66+return;67+ }646865- Log::info("ProcessNudgeSearchJob dispatched for nudge $nudge->id.");69+$search->nudges->each(fn ($nudge) => ProcessNudgeSearchJob::dispatch($nudge));66- }67- });68 });70 });71+72+if ($totalSearches > 0) {73+ Log::info('Nudge pre-filter results', [74+'activity_uuid' => $activity->getUuid(),75+'total_searches' => $totalSearches,76+'skipped' => $skippedCount,77+'dispatched' => $totalSearches - $skippedCount,78+'skip_rate' => round(($skippedCount / $totalSearches) * 100, 2) . '%',79+ ]);80+ }81+ }82+83+private function activityMightMatchSearch(Activity $activity, Search $search): array84+ {85+foreach ($search->filters as $filter) {86+$filterName = $filter->getFilterProperty();87+88+$result = match ($filterName) {89+'group_id' => $this->checkGroupId($activity, $filter),90+'user_id' => $this->checkUserId($activity, $filter),91+'channel_id' => $this->checkChannelId($activity, $filter),92+'provider_id' => $this->checkProviderId($activity, $filter),93+'category_id' => $this->checkCategoryId($activity, $filter),94+'min_duration' => $this->checkMinDuration($activity, $filter),95+'max_duration' => $this->checkMaxDuration($activity, $filter),96+'not_logged' => $this->checkNotLogged($activity, $filter),97+'only_recorded' => $this->checkOnlyRecorded($activity, $filter),98+'languages' => $this->checkLanguages($activity, $filter),99+'stage_id' => $this->checkStageId($activity, $filter),100+'start_date' => $this->checkStartDate($activity, $filter),101+'end_date' => $this->checkEndDate($activity, $filter),102+default => null, // Unknown filter - can't pre-check, assume might match103+ };104+105+if ($result === false) {106+return [107+'matches' => false,108+'mismatch_reason' => $filterName,109+'filter_value' => $filter->getFilterValue(),110+ ];111+ }112+ }113+114+return ['matches' => true];115+ }116+117+private function checkGroupId(Activity $activity, SearchFilter $filter): ?bool118+ {119+$groupUuid = $activity->user->getGroup()?->getUuid();120+if ($groupUuid === null) {121+return null;122+ }123+124+return $filter->getFilterValue() === $groupUuid ? null : false;125+ }126+127+private function checkUserId(Activity $activity, SearchFilter $filter): ?bool128+ {129+return $filter->getFilterValue() === $activity->user->getUuid() ? null : false;130+ }131+132+private function checkChannelId(Activity $activity, SearchFilter $filter): ?bool133+ {134+return $filter->getFilterValue() === $activity->getType() ? null : false;135+ }136+137+private function checkProviderId(Activity $activity, SearchFilter $filter): ?bool138+ {139+return $filter->getFilterValue() === $activity->getProvider() ? null : false;140+ }141+142+private function checkCategoryId(Activity $activity, SearchFilter $filter): ?bool143+ {144+$categoryId = $activity->getCategory()?->getUuid();145+if ($categoryId === null) {146+return null;147+ }148+149+return $filter->getFilterValue() === $categoryId ? null : false;150+ }151+152+private function checkMinDuration(Activity $activity, SearchFilter $filter): ?bool153+ {154+return $activity->getDuration() >= (float) $filter->getFilterValue() ? null : false;155+ }156+157+private function checkMaxDuration(Activity $activity, SearchFilter $filter): ?bool158+ {159+return $activity->getDuration() <= (float) $filter->getFilterValue() ? null : false;160+ }161+162+private function checkNotLogged(Activity $activity, SearchFilter $filter): ?bool163+ {164+if (! $filter->getFilterValue()) {165+return null;166+ }167+168+$isLogged = $activity->getCrmProviderId() !== null;169+$isInternal = $activity->isInternal();170+171+return (! $isLogged || $isInternal) ? null : false;172+ }173+174+private function checkOnlyRecorded(Activity $activity, SearchFilter $filter): ?bool175+ {176+$filterValue = (int) $filter->getFilterValue();177+$hasRecording = $activity->recording_state !== Activity::RECORDING_OFF;178+179+return match ($filterValue) {180+1 => $hasRecording ? null : false, // Only recorded181+2 => ! $hasRecording ? null : false, // Only non-recorded182+default => null,183+ };184+ }185+186+private function checkStageId(Activity $activity, SearchFilter $filter): ?bool187+ {188+$stageId = $activity->getStage()?->getUuid();189+if ($stageId === null) {190+return null; // No stage, let ES handle191+ }192+193+return $filter->getFilterValue() === $stageId ? null : false;194+ }195+196+private function checkStartDate(Activity $activity, SearchFilter $filter): ?bool197+ {198+$startTime = $activity->getActualStartTime();199+if ($startTime === null) {200+return null;201+ }202+203+$filterDate = Carbon::parse($filter->getFilterValue());204+205+return $startTime->gte($filterDate) ? null : false;206+ }207+208+private function checkEndDate(Activity $activity, SearchFilter $filter): ?bool209+ {210+$endTime = $activity->getActualEndTime();211+if ($endTime === null) {212+return null;213+ }214+215+$filterDate = Carbon::parse($filter->getFilterValue())->endOfDay();216+217+return $endTime->lte($filterDate) ? null : false;218+ }219+220+private function checkLanguages(Activity $activity, SearchFilter $filter): ?bool221+ {222+$activityLanguage = $activity->getLanguageCode();223+if ($activityLanguage === null) {224+return null;225+ }226+227+// Filter values are always base language codes (e.g., 'en', 'fr').228+// Extract base code from activity locale (e.g., en_GB -> en) to match ES query behavior.229+// See LanguageFilterDefinition::getQueries() which uses regex: $language . '_[a-z]{2}'230+$activityLangCode = explode('_', $activityLanguage)[0];231+$filterLanguage = $filter->getFilterValue();232+233+return $activityLangCode === $filterLanguage ? null : false;69 }234 }70}235}</selection>” selected.","depth":23,"on_screen":true,"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,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This code selection introduces a","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"pre-filtering mechanism","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to the","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny\\Component\\Nudge\\Job","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"namespace. The primary goal is to optimize performance by validating an activity against search criteria in-memory before dispatching costly background jobs.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Core Functionality Changes","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Core Functionality Changes","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Selective Loading:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"handle()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method now eager-loads","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"user.group","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for activities and specifically filters for","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FREQ_INSTANTLY","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"nudges and their associated search filters.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pre-Dispatch Validation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instead of dispatching jobs for every instant nudge, the system now calls","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activityMightMatchSearch()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short-Circuiting:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If an activity fails a pre-filter check (e.g., mismatched user ID or duration), the job dispatch is skipped, and the event is logged with the specific mismatch reason.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Performance Metrics:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Adds summary logging at the end of the process to track:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Total searches processed.","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of skipped dispatches.","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The \"Skip Rate\" percentage.","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Implemented Filter Checks","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Implemented Filter Checks","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The logic includes a","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"match","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"expression to validate various activity attributes against","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SearchFilter","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"values:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Identity & Metadata:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Matches for","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"group_id","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"user_id","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"channel_id","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"provider_id","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Temporal & Duration:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"* Validates","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"min_duration","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"max_duration","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Checks","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"start_date","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"end_date","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"using Carbon parsing.","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity State:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Logging:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Determines if an activity is logged to a CRM or is internal via","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"checkNotLogged","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recording:","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Uses","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"checkOnlyRecorded","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to filter based on whether a recording exists.","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Categorization:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Checks for","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"category_id","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"stage_id","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"languages","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Note:","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The language check specifically extracts base codes (e.g.,","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"en","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"en_GB","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to align with Elasticsearch behavior.","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Logic Design","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Logic Design","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nullable Returns:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Filter methods return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"null","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if a match is possible (or cannot be determined), and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"only when a definitive mismatch is found.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Safe Fallback:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If a filter type is unknown (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"default","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"), the system assumes a match and proceeds to dispatch, ensuring no false negatives.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said what is the logic behind diff. Act as code reviewer. First review the changes then explain it and then evaluate. Try to find potential issues and bottlenecks","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"what is the logic behind diff. Act as code reviewer. First review the changes then explain it and then evaluate. Try to find potential issues and bottlenecks","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":20,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a review of the changes provided in the diff, broken down by your requested structure.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Review of Changes","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Review of Changes","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This PR refactors the","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ProcessNudgeSearchJob","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"dispatching mechanism within the","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"handle()","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Query Optimization:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Eager loads necessary relationships (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"user.group","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"filters","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") and scopes the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"nudges","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"relationship at the database level to only fetch","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FREQ_INSTANTLY","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"records.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In-Memory Filtering:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduces a pre-filtering mechanism (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activityMightMatchSearch","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") that checks the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"against","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SearchFilter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"criteria before deciding to dispatch a job.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Helper Methods:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Adds 13 private","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"check*","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"methods to handle the specific comparison logic for different filter types (e.g., duration, dates, categories, stages).","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Observability:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Adds structured logging to record exactly why a nudge was skipped and outputs a summary report (total, skipped, dispatched, skip rate) at the end of the execution.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Explanation of Logic","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Explanation of Logic","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The core philosophy of this change is","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"veto-based short-circuiting\"","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Previously, the job fetched all searches with instant nudges for a team's users and blindly dispatched a queue job for every single one. The heavy lifting of deciding if the activity actually matched the search was likely deferred to the queue worker and Elasticsearch.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Now, the code evaluates the filters in the current process:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"It iterates through each","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and its associated","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SearchFilter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"s.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"It routes the filter to a specific","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"check*","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method using a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"match","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"expression based on the filter's property name.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Veto:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"check*","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"methods are designed to return","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"only if there is an absolute mismatch","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(e.g., the filter requires a minimum duration of 10, but the activity is 5).","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Pass:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the filter matches, or if the activity lacks the data needed to make a firm decision (e.g., no stage is assigned, or the filter type is unrecognized), the method returns","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"null","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". This acts as a pass, delegating the final strict evaluation to Elasticsearch later in the pipeline.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If any filter returns","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", the search is skipped, saving a queue dispatch.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Evaluation","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Evaluation","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Overall, this is a","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"highly effective performance optimization","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pros:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"It significantly reduces queue bloat. By filtering out obvious mismatches in-memory, you save the overhead of serializing, dispatching, picking up, and processing jobs that are destined to fail or do nothing. The use of","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"match","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"makes the routing exceptionally clean, and the nullable return design is a smart way to avoid false negatives.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cons/Trade-offs:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You are trading background queue worker time for a slight increase in synchronous memory and CPU usage on the current job. However, queue I/O is almost always more expensive than simple in-memory comparisons, making this a worthwhile trade.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Potential Issues & Bottlenecks","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Potential Issues & Bottlenecks","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"While the logic is sound, there are a few architectural bottlenecks and risks introduced or maintained in this diff:","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Potential N+1 Query / Lazy Loading Issues:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In the","depth":26,"bounds":{"left":0.16493055,"top":0.0,"width":0.031597223,"height":0.022777777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"handle","depth":27,"bounds":{"left":0.20069444,"top":0.0,"width":0.035069443,"height":0.020555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method, the activity is loaded with","depth":26,"bounds":{"left":0.16493055,"top":0.0,"width":0.19201389,"height":0.051666666},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity::with(['user.group'])","depth":27,"bounds":{"left":0.16909721,"top":0.0,"width":0.175,"height":0.020555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". However, inside your new","depth":26,"bounds":{"left":0.16493055,"top":0.0,"width":0.18888889,"height":0.051666666},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"check*","depth":27,"bounds":{"left":0.29895833,"top":0.02388889,"width":0.035069443,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"methods, you are calling:","depth":26,"bounds":{"left":0.16493055,"top":0.022222223,"width":0.17604166,"height":0.051666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity->getCategory()?->getUuid()","depth":29,"bounds":{"left":0.18784723,"top":0.093888886,"width":0.15590277,"height":0.049444444},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity->getStage()?->getUuid()","depth":29,"bounds":{"left":0.18784723,"top":0.16388889,"width":0.13819444,"height":0.049444444},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If","depth":28,"bounds":{"left":0.18784723,"top":0.22,"width":0.009722223,"height":0.022777777},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"category","depth":29,"bounds":{"left":0.20173611,"top":0.22166666,"width":0.046527777,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":28,"bounds":{"left":0.25243056,"top":0.22,"width":0.024652777,"height":0.022777777},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"stage","depth":29,"bounds":{"left":0.28125,"top":0.22166666,"width":0.029166667,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"are Eloquent relationships and are not eager-loaded on the original","depth":28,"bounds":{"left":0.18784723,"top":0.22,"width":0.175,"height":0.08055556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity","depth":29,"bounds":{"left":0.19201389,"top":0.30833334,"width":0.052430555,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"model, calling these methods inside a loop of","depth":28,"bounds":{"left":0.18784723,"top":0.30666667,"width":0.16736111,"height":0.051666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$totalSearches","depth":29,"bounds":{"left":0.19201389,"top":0.3661111,"width":0.081597224,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"will trigger lazy-loaded database queries.","depth":28,"bounds":{"left":0.18784723,"top":0.36444443,"width":0.1736111,"height":0.051666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fix:","depth":28,"bounds":{"left":0.18784723,"top":0.42222223,"width":0.01875,"height":0.022777777},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Update line 38 to:","depth":28,"bounds":{"left":0.20659722,"top":0.42222223,"width":0.09375,"height":0.022777777},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity = Activity::with(['user.group', 'category', 'stage'])->...","depth":29,"bounds":{"left":0.18784723,"top":0.4238889,"width":0.18680556,"height":0.07833333},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Massive Memory Consumption (Pre-existing but critical):","depth":26,"bounds":{"left":0.16493055,"top":0.52111113,"width":0.196875,"height":0.051666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lines 39-41:","depth":26,"bounds":{"left":0.16493055,"top":0.5788889,"width":0.060416665,"height":0.022777777},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PHP","depth":27,"bounds":{"left":0.17604166,"top":0.6388889,"width":0.019097222,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Download code","depth":27,"bounds":{"left":0.31770834,"top":0.62666667,"width":0.027777778,"height":0.044444446},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy code","depth":27,"bounds":{"left":0.3454861,"top":0.62666667,"width":0.027777778,"height":0.044444446},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"$team","depth":27,"bounds":{"left":0.17604166,"top":0.69722223,"width":0.029166667,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"= Team::with([","depth":27,"bounds":{"left":0.20520833,"top":0.69722223,"width":0.0875,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'users'","depth":27,"bounds":{"left":0.29270834,"top":0.69722223,"width":0.04097222,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"])->findOrFail(","depth":27,"bounds":{"left":0.33368057,"top":0.69722223,"width":0.0875,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity","depth":27,"bounds":{"left":0.42118055,"top":0.69722223,"width":0.052430555,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->user->team_id);","depth":27,"bounds":{"left":0.47361112,"top":0.69722223,"width":0.098958336,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$usersIds","depth":27,"bounds":{"left":0.17604166,"top":0.72055554,"width":0.052430555,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"=","depth":27,"bounds":{"left":0.22847222,"top":0.72055554,"width":0.017708333,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$team","depth":27,"bounds":{"left":0.24618055,"top":0.72055554,"width":0.029166667,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->users->pluck(","depth":27,"bounds":{"left":0.27534723,"top":0.72055554,"width":0.0875,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'id'","depth":27,"bounds":{"left":0.3628472,"top":0.72055554,"width":0.023263888,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")->toArray();","depth":27,"bounds":{"left":0.3861111,"top":0.72055554,"width":0.07569444,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If a team has thousands of users,","depth":26,"bounds":{"left":0.16493055,"top":0.7811111,"width":0.1701389,"height":0.022777777},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Team::with(['users'])","depth":27,"bounds":{"left":0.16909721,"top":0.81166667,"width":0.12256944,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"hydrates thousands of full Eloquent User models into memory just to extract their IDs.","depth":26,"bounds":{"left":0.16493055,"top":0.81,"width":0.20034721,"height":0.08055556},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fix:","depth":26,"bounds":{"left":0.16493055,"top":0.89666665,"width":0.01875,"height":0.022777777},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Bypass hydrating the models entirely by querying the relationship directly:","depth":26,"bounds":{"left":0.16493055,"top":0.89666665,"width":0.21041666,"height":0.051666666},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$usersIds = $team->users()->pluck('id')->toArray();","depth":27,"bounds":{"left":0.16493055,"top":0.95611113,"width":0.16180556,"height":0.043888867},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repeated Carbon Parsing in Loops:","depth":26,"bounds":{"left":0.16493055,"top":1.0,"width":0.18993056,"height":-0.02444446},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In","depth":26,"bounds":{"left":0.16493055,"top":1.0,"width":0.011805556,"height":-0.053333282},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"checkStartDate","depth":27,"bounds":{"left":0.18090278,"top":1.0,"width":0.08194444,"height":-0.054999948},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"bounds":{"left":0.26701388,"top":1.0,"width":0.024652777,"height":-0.053333282},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"checkEndDate","depth":27,"bounds":{"left":0.29583332,"top":1.0,"width":0.07013889,"height":-0.054999948},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", you parse the filter date:","depth":26,"bounds":{"left":0.16493055,"top":1.0,"width":0.21076389,"height":-0.053333282},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Carbon::parse($filter->getFilterValue())","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". If the same date filter applies to multiple searches, Carbon is being instantiated repeatedly in the loop. While Carbon is relatively fast, doing this hundreds of times adds unnecessary CPU cycles.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fix:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This is a minor nitpick, but if performance is the absolute goal, you could memoize/cache the parsed filter values within the job.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Loose Type Comparisons:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In methods like","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"checkChannelId","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"checkLanguages","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", you are using strict equality (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"===","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"). Ensure that","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$filter->getFilterValue()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(which is typically returned as a string from a database payload) matches the exact type returned by","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activity->getType()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$activityLangCode","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". If one is an integer","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and the other is a string","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"1\"","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", the strict check will return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", incorrectly preventing the nudge from sending.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":21,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":21,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Redo","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8661567996477389114
|
6636142770215328003
|
click
|
accessibility
|
NULL
|
Platform Sprint 3 Q2 - Platform Team - Scrum Board Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -4,16 +4,17 @@445namespace Jiminny\Component\Nudge\Job;5namespace Jiminny\Component\Nudge\Job;667+use Carbon\Carbon;7use Illuminate\Bus\Queueable;8use Illuminate\Bus\Queueable;8use Illuminate\Contracts\Queue\ShouldQueue;9use Illuminate\Contracts\Queue\ShouldQueue;9-use Illuminate\Database\Eloquent\Builder;10use Illuminate\Foundation\Bus\Dispatchable;10use Illuminate\Foundation\Bus\Dispatchable;11use Illuminate\Queue\InteractsWithQueue;11use Illuminate\Queue\InteractsWithQueue;12use Illuminate\Queue\SerializesModels;12use Illuminate\Queue\SerializesModels;13use Illuminate\Support\Facades\Log;13use Illuminate\Support\Facades\Log;14use Jiminny\Component\Queue\Constants;14use Jiminny\Component\Queue\Constants;15use Jiminny\Models\Activity;15use Jiminny\Models\Activity;16use Jiminny\Models\Activity\Search;16use Jiminny\Models\Activity\Search;17+use Jiminny\Models\Activity\SearchFilter;17use Jiminny\Models\Nudge;18use Jiminny\Models\Nudge;18use Jiminny\Models\Team;19use Jiminny\Models\Team;1920@@ -34,37 +35,201 @@343535public function handle(): void36public function handle(): void36 {37 {37-/** @var Activity $activity */38+$activity = Activity::with(['user.group'])->uuid($this->activityUuid, false)->firstOrFail();38-$activity = Activity::with(['user'])->uuid($this->activityUuid, false)->firstOrFail();39-40-/** @var Team $team */41$team = Team::with(['users'])->findOrFail($activity->user->team_id);39$team = Team::with(['users'])->findOrFail($activity->user->team_id);424043- Log::info(__METHOD__ . " Running for team $team->id.", [44-'activity_id' => $activity->id,45-'activity_uuid' => $this->activityUuid,46-'team_id' => $team->id,47- ]);48-49$usersIds = $team->users->pluck('id')->toArray();41$usersIds = $team->users->pluck('id')->toArray();504251-$searchesWithImmediateNudges = Activity\Search::with(['nudges'])43+$searchesWithImmediateNudges = Activity\Search::with([44+'nudges' => fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY),45+'filters',46+ ])52 ->whereIn('user_id', $usersIds)47 ->whereIn('user_id', $usersIds)53- ->whereHas('nudges', function (Builder $query) {48+ ->whereHas('nudges', fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY))54-$query->where('frequency', Nudge::FREQ_INSTANTLY);49+ ->get();55- })->get();50+51+$totalSearches = $searchesWithImmediateNudges->count();52+$skippedCount = 0;53+54+$searchesWithImmediateNudges->each(function (Search $search) use ($activity, &$skippedCount): void {55+$matchResult = $this->activityMightMatchSearch($activity, $search);565657-$searchesWithImmediateNudges->each(function (Search $search): void {57+if (! $matchResult['matches']) {58-$search->nudges->each(function (Nudge $nudge): void {58+$skippedCount++;59-// Filter only nudges that are set to be sent instantly59+ Log::info('Pre-filter skipped nudge dispatch', [60-if ($nudge->frequency === Nudge::FREQ_INSTANTLY) {60+'activity_uuid' => $activity->getUuid(),61- Log::info("Dispatching ProcessNudgeSearchJob for nudge $nudge->id.");61+'search_id' => $search->getId(),62+'mismatched_filter' => $matchResult['mismatch_reason'],63+'filter_value' => $matchResult['filter_value'],64+ ]);626563- ProcessNudgeSearchJob::dispatch($nudge);66+return;67+ }646865- Log::info("ProcessNudgeSearchJob dispatched for nudge $nudge->id.");69+$search->nudges->each(fn ($nudge) => ProcessNudgeSearchJob::dispatch($nudge));66- }67- });68 });70 });71+72+if ($totalSearches > 0) {73+ Log::info('Nudge pre-filter results', [74+'activity_uuid' => $activity->getUuid(),75+'total_searches' => $totalSearches,76+'skipped' => $skippedCount,77+'dispatched' => $totalSearches - $skippedCount,78+'skip_rate' => round(($skippedCount / $totalSearches) * 100, 2) . '%',79+ ]);80+ }81+ }82+83+private function activityMightMatchSearch(Activity $activity, Search $search): array84+ {85+foreach ($search->filters as $filter) {86+$filterName = $filter->getFilterProperty();87+88+$result = match ($filterName) {89+'group_id' => $this->checkGroupId($activity, $filter),90+'user_id' => $this->checkUserId($activity, $filter),91+'channel_id' => $this->checkChannelId($activity, $filter),92+'provider_id' => $this->checkProviderId($activity, $filter),93+'category_id' => $this->checkCategoryId($activity, $filter),94+'min_duration' => $this->checkMinDuration($activity, $filter),95+'max_duration' => $this->checkMaxDuration($activity, $filter),96+'not_logged' => $this->checkNotLogged($activity, $filter),97+'only_recorded' => $this->checkOnlyRecorded($activity, $filter),98+'languages' => $this->checkLanguages($activity, $filter),99+'stage_id' => $this->checkStageId($activity, $filter),100+'start_date' => $this->checkStartDate($activity, $filter),101+'end_date' => $this->checkEndDate($activity, $filter),102+default => null, // Unknown filter - can't pre-check, assume might match103+ };104+105+if ($result === false) {106+return [107+'matches' => false,108+'mismatch_reason' => $filterName,109+'filter_value' => $filter->getFilterValue(),110+ ];111+ }112+ }113+114+return ['matches' => true];115+ }116+117+private function checkGroupId(Activity $activity, SearchFilter $filter): ?bool118+ {119+$groupUuid = $activity->user->getGroup()?->getUuid();120+if ($groupUuid === null) {121+return null;122+ }123+124+return $filter->getFilterValue() === $groupUuid ? null : false;125+ }126+127+private function checkUserId(Activity $activity, SearchFilter $filter): ?bool128+ {129+return $filter->getFilterValue() === $activity->user->getUuid() ? null : false;130+ }131+132+private function checkChannelId(Activity $activity, SearchFilter $filter): ?bool133+ {134+return $filter->getFilterValue() === $activity->getType() ? null : false;135+ }136+137+private function checkProviderId(Activity $activity, SearchFilter $filter): ?bool138+ {139+return $filter->getFilterValue() === $activity->getProvider() ? null : false;140+ }141+142+private function checkCategoryId(Activity $activity, SearchFilter $filter): ?bool143+ {144+$categoryId = $activity->getCategory()?->getUuid();145+if ($categoryId === null) {146+return null;147+ }148+149+return $filter->getFilterValue() === $categoryId ? null : false;150+ }151+152+private function checkMinDuration(Activity $activity, SearchFilter $filter): ?bool153+ {154+return $activity->getDuration() >= (float) $filter->getFilterValue() ? null : false;155+ }156+157+private function checkMaxDuration(Activity $activity, SearchFilter $filter): ?bool158+ {159+return $activity->getDuration() <= (float) $filter->getFilterValue() ? null : false;160+ }161+162+private function checkNotLogged(Activity $activity, SearchFilter $filter): ?bool163+ {164+if (! $filter->getFilterValue()) {165+return null;166+ }167+168+$isLogged = $activity->getCrmProviderId() !== null;169+$isInternal = $activity->isInternal();170+171+return (! $isLogged || $isInternal) ? null : false;172+ }173+174+private function checkOnlyRecorded(Activity $activity, SearchFilter $filter): ?bool175+ {176+$filterValue = (int) $filter->getFilterValue();177+$hasRecording = $activity->recording_state !== Activity::RECORDING_OFF;178+179+return match ($filterValue) {180+1 => $hasRecording ? null : false, // Only recorded181+2 => ! $hasRecording ? null : false, // Only non-recorded182+default => null,183+ };184+ }185+186+private function checkStageId(Activity $activity, SearchFilter $filter): ?bool187+ {188+$stageId = $activity->getStage()?->getUuid();189+if ($stageId === null) {190+return null; // No stage, let ES handle191+ }192+193+return $filter->getFilterValue() === $stageId ? null : false;194+ }195+196+private function checkStartDate(Activity $activity, SearchFilter $filter): ?bool197+ {198+$startTime = $activity->getActualStartTime();199+if ($startTime === null) {200+return null;201+ }202+203+$filterDate = Carbon::parse($filter->getFilterValue());204+205+return $startTime->gte($filterDate) ? null : false;206+ }207+208+private function checkEndDate(Activity $activity, SearchFilter $filter): ?bool209+ {210+$endTime = $activity->getActualEndTime();211+if ($endTime === null) {212+return null;213+ }214+215+$filterDate = Carbon::parse($filter->getFilterValue())->endOfDay();216+217+return $endTime->lte($filterDate) ? null : false;218+ }219+220+private function checkLanguages(Activity $activity, SearchFilter $filter): ?bool221+ {222+$activityLanguage = $activity->getLanguageCode();223+if ($activityLanguage === null) {224+return null;225+ }226+227+// Filter values are always base language codes (e.g., 'en', 'fr').228+// Extract base code from activity locale (e.g., en_GB -> en) to match ES query behavior.229+// See LanguageFilterDefinition::getQueries() which uses regex: $language . '_[a-z]{2}'230+$activityLangCode = explode('_', $activityLanguage)[0];231+$filterLanguage = $filter->getFilterValue();232+233+return $activityLangCode === $filterLanguage ? null : false;69 }234 }70}235}</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 20493 smart instant nudge pre filtering by niko</tabTitle>” with “<selection>@@ -4,16 +4,17 @@445namespace Jiminny\Component\Nudge\Job;5namespace Jiminny\Component\Nudge\Job;667+use Carbon\Carbon;7use Illuminate\Bus\Queueable;8use Illuminate\Bus\Queueable;8use Illuminate\Contracts\Queue\ShouldQueue;9use Illuminate\Contracts\Queue\ShouldQueue;9-use Illuminate\Database\Eloquent\Builder;10use Illuminate\Foundation\Bus\Dispatchable;10use Illuminate\Foundation\Bus\Dispatchable;11use Illuminate\Queue\InteractsWithQueue;11use Illuminate\Queue\InteractsWithQueue;12use Illuminate\Queue\SerializesModels;12use Illuminate\Queue\SerializesModels;13use Illuminate\Support\Facades\Log;13use Illuminate\Support\Facades\Log;14use Jiminny\Component\Queue\Constants;14use Jiminny\Component\Queue\Constants;15use Jiminny\Models\Activity;15use Jiminny\Models\Activity;16use Jiminny\Models\Activity\Search;16use Jiminny\Models\Activity\Search;17+use Jiminny\Models\Activity\SearchFilter;17use Jiminny\Models\Nudge;18use Jiminny\Models\Nudge;18use Jiminny\Models\Team;19use Jiminny\Models\Team;1920@@ -34,37 +35,201 @@343535public function handle(): void36public function handle(): void36 {37 {37-/** @var Activity $activity */38+$activity = Activity::with(['user.group'])->uuid($this->activityUuid, false)->firstOrFail();38-$activity = Activity::with(['user'])->uuid($this->activityUuid, false)->firstOrFail();39-40-/** @var Team $team */41$team = Team::with(['users'])->findOrFail($activity->user->team_id);39$team = Team::with(['users'])->findOrFail($activity->user->team_id);424043- Log::info(__METHOD__ . " Running for team $team->id.", [44-'activity_id' => $activity->id,45-'activity_uuid' => $this->activityUuid,46-'team_id' => $team->id,47- ]);48-49$usersIds = $team->users->pluck('id')->toArray();41$usersIds = $team->users->pluck('id')->toArray();504251-$searchesWithImmediateNudges = Activity\Search::with(['nudges'])43+$searchesWithImmediateNudges = Activity\Search::with([44+'nudges' => fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY),45+'filters',46+ ])52 ->whereIn('user_id', $usersIds)47 ->whereIn('user_id', $usersIds)53- ->whereHas('nudges', function (Builder $query) {48+ ->whereHas('nudges', fn ($q) => $q->where('frequency', Nudge::FREQ_INSTANTLY))54-$query->where('frequency', Nudge::FREQ_INSTANTLY);49+ ->get();55- })->get();50+51+$totalSearches = $searchesWithImmediateNudges->count();52+$skippedCount = 0;53+54+$searchesWithImmediateNudges->each(function (Search $search) use ($activity, &$skippedCount): void {55+$matchResult = $this->activityMightMatchSearch($activity, $search);565657-$searchesWithImmediateNudges->each(function (Search $search): void {57+if (! $matchResult['matches']) {58-$search->nudges->each(function (Nudge $nudge): void {58+$skippedCount++;59-// Filter only nudges that are set to be sent instantly59+ Log::info('Pre-filter skipped nudge dispatch', [60-if ($nudge->frequency === Nudge::FREQ_INSTANTLY) {60+'activity_uuid' => $activity->getUuid(),61- Log::info("Dispatching ProcessNudgeSearchJob for nudge $nudge->id.");61+'search_id' => $search->getId(),62+'mismatched_filter' => $matchResult['mismatch_reason'],63+'filter_value' => $matchResult['filter_value'],64+ ]);626563- ProcessNudgeSearchJob::dispatch($nudge);66+return;67+ }646865- Log::info("ProcessNudgeSearchJob dispatched for nudge $nudge->id.");69+$search->nudges->each(fn ($nudge) => ProcessNudgeSearchJob::dispatch($nudge));66- }67- });68 });70 });71+72+if ($totalSearches > 0) {73+ Log::info('Nudge pre-filter results', [74+'activity_uuid' => $activity->getUuid(),75+'total_searches' => $totalSearches,76+'skipped' => $skippedCount,77+'dispatched' => $totalSearches - $skippedCount,78+'skip_rate' => round(($skippedCount / $totalSearches) * 100, 2) . '%',79+ ]);80+ }81+ }82+83+private function activityMightMatchSearch(Activity $activity, Search $search): array84+ {85+foreach ($search->filters as $filter) {86+$filterName = $filter->getFilterProperty();87+88+$result = match ($filterName) {89+'group_id' => $this->checkGroupId($activity, $filter),90+'user_id' => $this->checkUserId($activity, $filter),91+'channel_id' => $this->checkChannelId($activity, $filter),92+'provider_id' => $this->checkProviderId($activity, $filter),93+'category_id' => $this->checkCategoryId($activity, $filter),94+'min_duration' => $this->checkMinDuration($activity, $filter),95+'max_duration' => $this->checkMaxDuration($activity, $filter),96+'not_logged' => $this->checkNotLogged($activity, $filter),97+'only_recorded' => $this->checkOnlyRecorded($activity, $filter),98+'languages' => $this->checkLanguages($activity, $filter),99+'stage_id' => $this->checkStageId($activity, $filter),100+'start_date' => $this->checkStartDate($activity, $filter),101+'end_date' => $this->checkEndDate($activity, $filter),102+default => null, // Unknown filter - can't pre-check, assume might match103+ };104+105+if ($result === false) {106+return [107+'matches' => false,108+'mismatch_reason' => $filterName,109+'filter_value' => $filter->getFilterValue(),110+ ];111+ }112+ }113+114+return ['matches' => true];115+ }116+117+private function checkGroupId(Activity $activity, SearchFilter $filter): ?bool118+ {119+$groupUuid = $activity->user->getGroup()?->getUuid();120+if ($groupUuid === null) {121+return null;122+ }123+124+return $filter->getFilterValue() === $groupUuid ? null : false;125+ }126+127+private function checkUserId(Activity $activity, SearchFilter $filter): ?bool128+ {129+return $filter->getFilterValue() === $activity->user->getUuid() ? null : false;130+ }131+132+private function checkChannelId(Activity $activity, SearchFilter $filter): ?bool133+ {134+return $filter->getFilterValue() === $activity->getType() ? null : false;135+ }136+137+private function checkProviderId(Activity $activity, SearchFilter $filter): ?bool138+ {139+return $filter->getFilterValue() === $activity->getProvider() ? null : false;140+ }141+142+private function checkCategoryId(Activity $activity, SearchFilter $filter): ?bool143+ {144+$categoryId = $activity->getCategory()?->getUuid();145+if ($categoryId === null) {146+return null;147+ }148+149+return $filter->getFilterValue() === $categoryId ? null : false;150+ }151+152+private function checkMinDuration(Activity $activity, SearchFilter $filter): ?bool153+ {154+return $activity->getDuration() >= (float) $filter->getFilterValue() ? null : false;155+ }156+157+private function checkMaxDuration(Activity $activity, SearchFilter $filter): ?bool158+ {159+return $activity->getDuration() <= (float) $filter->getFilterValue() ? null : false;160+ }161+162+private function checkNotLogged(Activity $activity, SearchFilter $filter): ?bool163+ {164+if (! $filter->getFilterValue()) {165+return null;166+ }167+168+$isLogged = $activity->getCrmProviderId() !== null;169+$isInternal = $activity->isInternal();170+171+return (! $isLogged || $isInternal) ? null : false;172+ }173+174+private function checkOnlyRecorded(Activity $activity, SearchFilter $filter): ?bool175+ {176+$filterValue = (int) $filter->getFilterValue();177+$hasRecording = $activity->recording_state !== Activity::RECORDING_OFF;178+179+return match ($filterValue) {180+1 => $hasRecording ? null : false, // Only recorded181+2 => ! $hasRecording ? null : false, // Only non-recorded182+default => null,183+ };184+ }185+186+private function checkStageId(Activity $activity, SearchFilter $filter): ?bool187+ {188+$stageId = $activity->getStage()?->getUuid();189+if ($stageId === null) {190+return null; // No stage, let ES handle191+ }192+193+return $filter->getFilterValue() === $stageId ? null : false;194+ }195+196+private function checkStartDate(Activity $activity, SearchFilter $filter): ?bool197+ {198+$startTime = $activity->getActualStartTime();199+if ($startTime === null) {200+return null;201+ }202+203+$filterDate = Carbon::parse($filter->getFilterValue());204+205+return $startTime->gte($filterDate) ? null : false;206+ }207+208+private function checkEndDate(Activity $activity, SearchFilter $filter): ?bool209+ {210+$endTime = $activity->getActualEndTime();211+if ($endTime === null) {212+return null;213+ }214+215+$filterDate = Carbon::parse($filter->getFilterValue())->endOfDay();216+217+return $endTime->lte($filterDate) ? null : false;218+ }219+220+private function checkLanguages(Activity $activity, SearchFilter $filter): ?bool221+ {222+$activityLanguage = $activity->getLanguageCode();223+if ($activityLanguage === null) {224+return null;225+ }226+227+// Filter values are always base language codes (e.g., 'en', 'fr').228+// Extract base code from activity locale (e.g., en_GB -> en) to match ES query behavior.229+// See LanguageFilterDefinition::getQueries() which uses regex: $language . '_[a-z]{2}'230+$activityLangCode = explode('_', $activityLanguage)[0];231+$filterLanguage = $filter->getFilterValue();232+233+return $activityLangCode === $filterLanguage ? null : false;69 }234 }70}235}</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
Gemini said
Gemini said
This code selection introduces a
pre-filtering mechanism
to the
Jiminny\Component\Nudge\Job
namespace. The primary goal is to optimize performance by validating an activity against search criteria in-memory before dispatching costly background jobs.
Core Functionality Changes
Core Functionality Changes
Selective Loading:
The
handle()
method now eager-loads
user.group
for activities and specifically filters for
FREQ_INSTANTLY
nudges and their associated search filters.
Pre-Dispatch Validation:
Instead of dispatching jobs for every instant nudge, the system now calls
activityMightMatchSearch()
.
Short-Circuiting:
If an activity fails a pre-filter check (e.g., mismatched user ID or duration), the job dispatch is skipped, and the event is logged with the specific mismatch reason.
Performance Metrics:
Adds summary logging at the end of the process to track:
Total searches processed.
Number of skipped dispatches.
The "Skip Rate" percentage.
Implemented Filter Checks
Implemented Filter Checks
The logic includes a
match
expression to validate various activity attributes against
SearchFilter
values:
Identity & Metadata:
Matches for
group_id
,
user_id
,
channel_id
, and
provider_id
.
Temporal & Duration:
* Validates
min_duration
and
max_duration
.
Checks
start_date
and
end_date
using Carbon parsing.
Activity State:
*
Logging:
Determines if an activity is logged to a CRM or is internal via
checkNotLogged
.
Recording:
Uses
checkOnlyRecorded
to filter based on whether a recording exists.
Categorization:
Checks for
category_id
,
stage_id
, and
languages
.
Note:
The language check specifically extracts base codes (e.g.,
en
from
en_GB
) to align with Elasticsearch behavior.
Logic Design
Logic Design
Nullable Returns:
Filter methods return
null
if a match is possible (or cannot be determined), and
false
only when a definitive mismatch is found.
Safe Fallback:
If a filter type is unknown (
default
), the system assumes a match and proceeds to dispatch, ensuring no false negatives.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said what is the logic behind diff. Act as code reviewer. First review the changes then explain it and then evaluate. Try to find potential issues and bottlenecks
You said
what is the logic behind diff. Act as code reviewer. First review the changes then explain it and then evaluate. Try to find potential issues and bottlenecks
Expand
Listen
Show more options
Show thinking
Gemini said
Gemini said
Here is a review of the changes provided in the diff, broken down by your requested structure.
1. Review of Changes
1. Review of Changes
This PR refactors the
ProcessNudgeSearchJob
dispatching mechanism within the
handle()
method.
Query Optimization:
Eager loads necessary relationships (
user.group
,
filters
) and scopes the
nudges
relationship at the database level to only fetch
FREQ_INSTANTLY
records.
In-Memory Filtering:
Introduces a pre-filtering mechanism (
activityMightMatchSearch
) that checks the
Activity
against
SearchFilter
criteria before deciding to dispatch a job.
Helper Methods:
Adds 13 private
check*
methods to handle the specific comparison logic for different filter types (e.g., duration, dates, categories, stages).
Observability:
Adds structured logging to record exactly why a nudge was skipped and outputs a summary report (total, skipped, dispatched, skip rate) at the end of the execution.
2. Explanation of Logic
2. Explanation of Logic
The core philosophy of this change is
"veto-based short-circuiting"
.
Previously, the job fetched all searches with instant nudges for a team's users and blindly dispatched a queue job for every single one. The heavy lifting of deciding if the activity actually matched the search was likely deferred to the queue worker and Elasticsearch.
Now, the code evaluates the filters in the current process:
It iterates through each
Search
and its associated
SearchFilter
s.
It routes the filter to a specific
check*
method using a
match
expression based on the filter's property name.
The Veto:
The
check*
methods are designed to return
false
only if there is an absolute mismatch
(e.g., the filter requires a minimum duration of 10, but the activity is 5).
The Pass:
If the filter matches, or if the activity lacks the data needed to make a firm decision (e.g., no stage is assigned, or the filter type is unrecognized), the method returns
null
. This acts as a pass, delegating the final strict evaluation to Elasticsearch later in the pipeline.
If any filter returns
false
, the search is skipped, saving a queue dispatch.
3. Evaluation
3. Evaluation
Overall, this is a
highly effective performance optimization
.
Pros:
It significantly reduces queue bloat. By filtering out obvious mismatches in-memory, you save the overhead of serializing, dispatching, picking up, and processing jobs that are destined to fail or do nothing. The use of
match
makes the routing exceptionally clean, and the nullable return design is a smart way to avoid false negatives.
Cons/Trade-offs:
You are trading background queue worker time for a slight increase in synchronous memory and CPU usage on the current job. However, queue I/O is almost always more expensive than simple in-memory comparisons, making this a worthwhile trade.
4. Potential Issues & Bottlenecks
4. Potential Issues & Bottlenecks
While the logic is sound, there are a few architectural bottlenecks and risks introduced or maintained in this diff:
Potential N+1 Query / Lazy Loading Issues:
In the
handle
method, the activity is loaded with
Activity::with(['user.group'])
. However, inside your new
check*
methods, you are calling:
$activity->getCategory()?->getUuid()
$activity->getStage()?->getUuid()
If
category
and
stage
are Eloquent relationships and are not eager-loaded on the original
$activity
model, calling these methods inside a loop of
$totalSearches
will trigger lazy-loaded database queries.
Fix:
Update line 38 to:
$activity = Activity::with(['user.group', 'category', 'stage'])->...
Massive Memory Consumption (Pre-existing but critical):
Lines 39-41:
PHP
Download code
Copy code
$team
= Team::with([
'users'
])->findOrFail(
$activity
->user->team_id);
$usersIds
=
$team
->users->pluck(
'id'
)->toArray();
If a team has thousands of users,
Team::with(['users'])
hydrates thousands of full Eloquent User models into memory just to extract their IDs.
Fix:
Bypass hydrating the models entirely by querying the relationship directly:
$usersIds = $team->users()->pluck('id')->toArray();
Repeated Carbon Parsing in Loops:
In
checkStartDate
and
checkEndDate
, you parse the filter date:
Carbon::parse($filter->getFilterValue())
. If the same date filter applies to multiple searches, Carbon is being instantiated repeatedly in the loop. While Carbon is relatively fast, doing this hundreds of times adds unnecessary CPU cycles.
Fix:
This is a minor nitpick, but if performance is the absolute goal, you could memoize/cache the parsed filter values within the job.
Loose Type Comparisons:
In methods like
checkChannelId
or
checkLanguages
, you are using strict equality (
===
). Ensure that
$filter->getFilterValue()
(which is typically returned as a string from a database payload) matches the exact type returned by
$activity->getType()
or
$activityLangCode
. If one is an integer
1
and the other is a string
"1"
, the strict check will return
false
, incorrectly preventing the nudge from sending.
Good response
Bad response
Redo...
|
7712
|
NULL
|
NULL
|
NULL
|
|
18582
|
803
|
9
|
2026-05-11T11:35:09.487624+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778499309487_m2.jpg...
|
PhpStorm
|
faVsco.js – HandleHubspotRateLimit.php
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormVIewINavicareCodeFV faVsco.js?9 JY-20725-h PhostormVIewINavicareCodeFV faVsco.js?9 JY-20725-handle-HS-search-rate-limitProiectD MeetingBo1v Middleware© PlaybackController.php© CachedCrmServiceDecorator.php© kateLimitea.ongD StreamingRemoteMatch.onp© Job.phpa leamD Telephony(C)PaqinationState.phpC) MatchCrmData.phpC) CrmObiectsResolver.pho© ProviderRateLimiter.php© PaginationConfia.phpv D Userclass HandleHubsootRateLimitA1.vc) ChangeEmailjob.phpDeactivateUserJob.ph© DeleteScheduledUser/ 23@ SetupDefaultSavedSe: 24@ SvncTolntercom.phppublic function handle(object Sjob, callable Snext): voidtry 1Snext((5100)"} catch (RateLimitException $e) {Sdelav = maxc value: self::MIN RETRY DELAY, min(Se->aetRetrvAfter@olvalues: self::MAX RETRY DELAYD:c) suncirop anhat.ono(C) SvnctoUserPilot.oho// Add jitter to prevent thundering herd problem by randomizing retry timesSdelay += random_ int(0, self::JITTER_SECONDS) :© BaseProcessingJob.phpC)Dummv.lob.ohoSattemnts = Cioh-Sattemnts0.© ImportRecallAlRecordings so(cImnortRemoteTrack.loh.ncloh nhnif (Sattempts <= 3| Sattempts % 10 === 0) 1Log::info( message: '[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', ['job_class' => $job::class,C).lohDisnatcher nhn© JobDispatcherinterface.p 34© PurgeSoftDeletedOpportu• SqsVisibilityControl.phpv D ListenersvM Activitios"actempus → sactempus.'retry_after' => $e->getRetryAfterO'delay' => $delay,vM Activity DrovidorSiob->release ($delay):ShelConsole,Log XChanges 12 tiles= env.locall aod© Client.php app/Services/Crm/Hubspot(C) HandleHlubsootRateLimit.oho aoo/.lobs/Middleware© HandleHubspotRateLimitTest.php tests/Unit/Jobs/Middleware(1HubsootClientinterface.oho aon/Services/Crm/Hubsoot+ → @ Side-by-side viewer8 35f036ac app/Exceptions/RateLimitException.phpDo not ignoreHighlight wordsx 13 B?declare(strict types=1)namespace Jiminny Exceptions© HubspotPaginationService.php app/Services/Crm/Hubspot/Pagination© JiminnyDebugCommand.php app/Console/Commandsphp logging.php config© MatchActivityCrmData.php app/Jobs/Crm© PaginationState.php app/Services/Crm/Hubspot/Pagination@ Patol imitEycention nhn ann/Eycontioneclass RateLimitException extends LoqicExceptionlCascade &e 7Command@t Datel imitEycentionTest.php tests/Unit/Exceptions/ Unversioned Files 9 filesE.env.nikilocal app= onv other appС) CanAccessAiReportsTest.php tests/Unit/Policies© CreateMockAskJiminnvReportResultCommand.php app/Console/Commands/RepE favicon.ico publidE ids.txt appT raw sal querv sal app© SimulateWebhooksCommand.php app/Console/Commands/Crm/HubspotM_WE?HOOK FILTERING IMPLEMENTATION.md a00Tacts naccod. 12 (todav 12:02• Preparation tor kerl.. In 2o m100% Lz• Mon 11 May 14:35:09HandleHubspotRateLimitTest v+0 ..A SF (jiminny@localhost]4 HS_local [jiminny@localhost]# console [PKol)# console [eu)A console [STAGING]1/1417161/ J1727172817291730[2026-05-11 11:20:43] local.ERROR: Failed to refresh HubSpot token {"account_id":1372, "updated_ wM454 ^Y[2026-05-11 11:20:43] local.NOTICE: Repairing HubSpot tokens end {"total":3, "fixed":0,"failed":3} {"correlation[2026-05-11 11:20:48] local.INF0: Jiminny\Console\Commands\Command::run Memory usage before starting command {™[2026-05-11 11:20:48] local.INF0: Jiminny\Console\Commands\Command::run Memory usage before starting command {"12020-05-11 11.20.48 LocaL.LNFU. LHUDspor Journal commanal scarting polling service1"correlac1on10: Y540152020-05-11 11.20:48 Local. LNFU.[HubSpot Journal Polling) Service starting {"memory_limit":"256M", "max_execut2020-05-11 11:20:48 Local. LNFU:Hubspor Journal Polling Acqulred polling lock ""explres at: 2020-05-111152026-05-11 11.20.48 LocaL.LNFU:2026-05-11 11.20.48 LocaL.LNFU:Jaminnyconsole commanos.comremory usage tor commano "commano"."7[2026-05-11 11:20:491 local.INF0:Jiminny\Console\Commands\Command::run Memory usage for co2826-05-11 11:20:49 Local.INF0:HubSpot Journal Auth Successfully obtained new access token «"expires_1n":2826-05-11 11:20:491 Local.INF0: HubSpot Journal Polling No data2826-05-11 11:20:53 Local.INF0:Jaminny Console Commands Command: :runMemory usage before starting command[2026-05-11 11:20:53] Local.INF0: Jiminny\Console\Commands\Command: :run Memory usage for command {"command" : "cnLocal.INFO:2026-05-11 11:20:5611local.INFO: Jiminny Console \Commands \Command::run Memory usage before starting command 1"[2026-05-11 11:20:57] local.INF0: Jiminny \Console \Commands \Command::run Memory usage for command t"command":"cr2026-05-11 11:20:591 Loc0lINF0: HubSoot Journal Pollinal No data"correlation 1d"."954d156d-8a4f-4592-a046Hubspot Rate Limit Re3. Middleware behavior is healthy vSamole line[HandleHubspotRateLimit] Rate limit caught, releasing job with delay ("attempts":1,"retry_after":1,"d•delay=5 is retry after (1) + jitter (random 0-S) = within [1, 61•Other releases in the log show delay: 4, 5 etc. - jitter is varying as expected•All attempts:1 - no jobs reached 2+ retries, meaning subsequent attempts after release succeeded on the next pass4. No anti-patterns triggered V• Zero Failed to match GRM data lines = the instanceof RateLimitExcention filter in MatchActivitvCrmData::handlZero permanently failed lines = no job hit retryUntil - everything completed within window• Zero using default warnings = parseRetryAfter always extracted a known keyword from the messageWhat this means for productionEytranolatina to the 100k cconario.pesul43% of rate-limits served from cache (3/7) — and that's at LOW load. At storm scale, this raticsed 92% of your quota. Quota resets May 12, 11:00 AM GMT+3.Ask anytning (dtl<> CodeClaude Opus 4.7 Medium2 differencesCurrent versiordeclare(strict_ types=1)*namespace Jiminny Exceptionsuse Throwableclass RateLimitExcention extends RuntimeExcentionpublic function __construct(Strina Smessage =private readonly int $retryAfter = 1,Throwahil e Sarevious = nuinarent.• construct Smessage. A Snrevious)•public function getRetryAfterO: intnotunn may/Cthic-snotnvAfton 1)•W Windsurf Teamc22-15 UTF.Rio 4 spaces...
|
NULL
|
8661236068238727923
|
NULL
|
click
|
ocr
|
NULL
|
PhostormVIewINavicareCodeFV faVsco.js?9 JY-20725-h PhostormVIewINavicareCodeFV faVsco.js?9 JY-20725-handle-HS-search-rate-limitProiectD MeetingBo1v Middleware© PlaybackController.php© CachedCrmServiceDecorator.php© kateLimitea.ongD StreamingRemoteMatch.onp© Job.phpa leamD Telephony(C)PaqinationState.phpC) MatchCrmData.phpC) CrmObiectsResolver.pho© ProviderRateLimiter.php© PaginationConfia.phpv D Userclass HandleHubsootRateLimitA1.vc) ChangeEmailjob.phpDeactivateUserJob.ph© DeleteScheduledUser/ 23@ SetupDefaultSavedSe: 24@ SvncTolntercom.phppublic function handle(object Sjob, callable Snext): voidtry 1Snext((5100)"} catch (RateLimitException $e) {Sdelav = maxc value: self::MIN RETRY DELAY, min(Se->aetRetrvAfter@olvalues: self::MAX RETRY DELAYD:c) suncirop anhat.ono(C) SvnctoUserPilot.oho// Add jitter to prevent thundering herd problem by randomizing retry timesSdelay += random_ int(0, self::JITTER_SECONDS) :© BaseProcessingJob.phpC)Dummv.lob.ohoSattemnts = Cioh-Sattemnts0.© ImportRecallAlRecordings so(cImnortRemoteTrack.loh.ncloh nhnif (Sattempts <= 3| Sattempts % 10 === 0) 1Log::info( message: '[HandleHubspotRateLimit] Rate limit caught, releasing job with delay', ['job_class' => $job::class,C).lohDisnatcher nhn© JobDispatcherinterface.p 34© PurgeSoftDeletedOpportu• SqsVisibilityControl.phpv D ListenersvM Activitios"actempus → sactempus.'retry_after' => $e->getRetryAfterO'delay' => $delay,vM Activity DrovidorSiob->release ($delay):ShelConsole,Log XChanges 12 tiles= env.locall aod© Client.php app/Services/Crm/Hubspot(C) HandleHlubsootRateLimit.oho aoo/.lobs/Middleware© HandleHubspotRateLimitTest.php tests/Unit/Jobs/Middleware(1HubsootClientinterface.oho aon/Services/Crm/Hubsoot+ → @ Side-by-side viewer8 35f036ac app/Exceptions/RateLimitException.phpDo not ignoreHighlight wordsx 13 B?declare(strict types=1)namespace Jiminny Exceptions© HubspotPaginationService.php app/Services/Crm/Hubspot/Pagination© JiminnyDebugCommand.php app/Console/Commandsphp logging.php config© MatchActivityCrmData.php app/Jobs/Crm© PaginationState.php app/Services/Crm/Hubspot/Pagination@ Patol imitEycention nhn ann/Eycontioneclass RateLimitException extends LoqicExceptionlCascade &e 7Command@t Datel imitEycentionTest.php tests/Unit/Exceptions/ Unversioned Files 9 filesE.env.nikilocal app= onv other appС) CanAccessAiReportsTest.php tests/Unit/Policies© CreateMockAskJiminnvReportResultCommand.php app/Console/Commands/RepE favicon.ico publidE ids.txt appT raw sal querv sal app© SimulateWebhooksCommand.php app/Console/Commands/Crm/HubspotM_WE?HOOK FILTERING IMPLEMENTATION.md a00Tacts naccod. 12 (todav 12:02• Preparation tor kerl.. In 2o m100% Lz• Mon 11 May 14:35:09HandleHubspotRateLimitTest v+0 ..A SF (jiminny@localhost]4 HS_local [jiminny@localhost]# console [PKol)# console [eu)A console [STAGING]1/1417161/ J1727172817291730[2026-05-11 11:20:43] local.ERROR: Failed to refresh HubSpot token {"account_id":1372, "updated_ wM454 ^Y[2026-05-11 11:20:43] local.NOTICE: Repairing HubSpot tokens end {"total":3, "fixed":0,"failed":3} {"correlation[2026-05-11 11:20:48] local.INF0: Jiminny\Console\Commands\Command::run Memory usage before starting command {™[2026-05-11 11:20:48] local.INF0: Jiminny\Console\Commands\Command::run Memory usage before starting command {"12020-05-11 11.20.48 LocaL.LNFU. LHUDspor Journal commanal scarting polling service1"correlac1on10: Y540152020-05-11 11.20:48 Local. LNFU.[HubSpot Journal Polling) Service starting {"memory_limit":"256M", "max_execut2020-05-11 11:20:48 Local. LNFU:Hubspor Journal Polling Acqulred polling lock ""explres at: 2020-05-111152026-05-11 11.20.48 LocaL.LNFU:2026-05-11 11.20.48 LocaL.LNFU:Jaminnyconsole commanos.comremory usage tor commano "commano"."7[2026-05-11 11:20:491 local.INF0:Jiminny\Console\Commands\Command::run Memory usage for co2826-05-11 11:20:49 Local.INF0:HubSpot Journal Auth Successfully obtained new access token «"expires_1n":2826-05-11 11:20:491 Local.INF0: HubSpot Journal Polling No data2826-05-11 11:20:53 Local.INF0:Jaminny Console Commands Command: :runMemory usage before starting command[2026-05-11 11:20:53] Local.INF0: Jiminny\Console\Commands\Command: :run Memory usage for command {"command" : "cnLocal.INFO:2026-05-11 11:20:5611local.INFO: Jiminny Console \Commands \Command::run Memory usage before starting command 1"[2026-05-11 11:20:57] local.INF0: Jiminny \Console \Commands \Command::run Memory usage for command t"command":"cr2026-05-11 11:20:591 Loc0lINF0: HubSoot Journal Pollinal No data"correlation 1d"."954d156d-8a4f-4592-a046Hubspot Rate Limit Re3. Middleware behavior is healthy vSamole line[HandleHubspotRateLimit] Rate limit caught, releasing job with delay ("attempts":1,"retry_after":1,"d•delay=5 is retry after (1) + jitter (random 0-S) = within [1, 61•Other releases in the log show delay: 4, 5 etc. - jitter is varying as expected•All attempts:1 - no jobs reached 2+ retries, meaning subsequent attempts after release succeeded on the next pass4. No anti-patterns triggered V• Zero Failed to match GRM data lines = the instanceof RateLimitExcention filter in MatchActivitvCrmData::handlZero permanently failed lines = no job hit retryUntil - everything completed within window• Zero using default warnings = parseRetryAfter always extracted a known keyword from the messageWhat this means for productionEytranolatina to the 100k cconario.pesul43% of rate-limits served from cache (3/7) — and that's at LOW load. At storm scale, this raticsed 92% of your quota. Quota resets May 12, 11:00 AM GMT+3.Ask anytning (dtl<> CodeClaude Opus 4.7 Medium2 differencesCurrent versiordeclare(strict_ types=1)*namespace Jiminny Exceptionsuse Throwableclass RateLimitExcention extends RuntimeExcentionpublic function __construct(Strina Smessage =private readonly int $retryAfter = 1,Throwahil e Sarevious = nuinarent.• construct Smessage. A Snrevious)•public function getRetryAfterO: intnotunn may/Cthic-snotnvAfton 1)•W Windsurf Teamc22-15 UTF.Rio 4 spaces...
|
18579
|
NULL
|
NULL
|
NULL
|
|
24874
|
1041
|
44
|
2026-05-12T10:05:46.230563+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778580346230_m2.jpg...
|
Firefox
|
test (879945) - jiminny/app — Work
|
True
|
app.circleci.com/pipelines/github/jiminny/app/5788 app.circleci.com/pipelines/github/jiminny/app/57889/workflows/2dda2a4c-3115-46a4-9b4d-e283acb7aab7/jobs/879945...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Unnamed Group
TypeError: League\Flysystem\Filesyst Unnamed Group
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
Close tab
CloudWatch | us-east-2
CloudWatch | us-east-2
Unnamed Group
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Pull requests · jiminny/app
Pull requests · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app
JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app
Data Explorer
Data Explorer
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
Jiminny
Jiminny
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
Platform Team - Backlog - Jira
Platform Team - Backlog - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
test (879945) - jiminny/app
test (879945) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Smarter Testing is now in beta
Smarter Testing is now in beta
Get faster feedback on your tests while maintaining full confidence
Dismiss
Get Started
Get Started
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20773-fix-automated-reports-user-pilot-tracking
JY-20773-fix-automated-reports-user-pilot-tracking
/
Pipelines app #57889
app #57889
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (879945)
test (879945)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
9m 21s
9m 21s
/
Copy timestamp to clipboard
14d ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20773-fix-automated-reports-user-pilot-tracking
JY-20773-fix-automated-reports-user-pilot-tracking
PR /
Commit
#12024
#
12024
/
Open commit on version control site
6bd41c8
Author
& Message
Avatar of Lukas Kovalik
JY-20773 fix user pilot tracking ofr automated report generated
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 43s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
43s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 39s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 39s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 39s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 39s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 39s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 39s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 12s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
12s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 10s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
10s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 32s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
32s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Unnamed Group","depth":4,"bounds":{"left":0.0028257978,"top":0.057063047,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":4,"bounds":{"left":0.0028257978,"top":0.08060654,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":5,"bounds":{"left":0.015957447,"top":0.09217877,"width":0.40492022,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.087789305,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0028257978,"top":0.11332801,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.015957447,"top":0.12490024,"width":0.04138963,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unnamed Group","depth":4,"bounds":{"left":0.0028257978,"top":0.15123703,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"bounds":{"left":0.0028257978,"top":0.17478053,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":5,"bounds":{"left":0.015957447,"top":0.18635276,"width":0.16888298,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":4,"bounds":{"left":0.0,"top":0.207502,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.21907422,"width":0.16140293,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.24022347,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.25179568,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.27294493,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.28451717,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pull requests · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.3056664,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.31723863,"width":0.04537899,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":4,"bounds":{"left":0.0,"top":0.33838788,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.3499601,"width":0.1200133,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.37110934,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.38268158,"width":0.19331782,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20776] Automated report - sentry - Jira","depth":4,"bounds":{"left":0.0,"top":0.4038308,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20776] Automated report - sentry - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.41540304,"width":0.07646277,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.4365523,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.4481245,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.46927375,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.48084596,"width":0.15159574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Data Explorer","depth":4,"bounds":{"left":0.0,"top":0.5019952,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Data Explorer","depth":5,"bounds":{"left":0.013297873,"top":0.51356745,"width":0.0234375,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20776] Automated report - sentry - Jira","depth":4,"bounds":{"left":0.0,"top":0.53471667,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20776] Automated report - sentry - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.5462889,"width":0.07646277,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.5674381,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.013297873,"top":0.57901037,"width":0.013131649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.60015965,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.6117318,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":4,"bounds":{"left":0.0,"top":0.6328811,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6444533,"width":0.09524601,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Platform Team - Backlog - Jira","depth":4,"bounds":{"left":0.0,"top":0.66560256,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team - Backlog - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6771748,"width":0.053025264,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":4,"bounds":{"left":0.0,"top":0.698324,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.70989627,"width":0.1200133,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"test (879945) - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.7310455,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"test (879945) - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.7426177,"width":0.047872342,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.73822826,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.76536316,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Go to home page","depth":9,"bounds":{"left":0.08726729,"top":0.061452515,"width":0.044215426,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Auto theme","depth":9,"bounds":{"left":0.9375,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open notifications","depth":9,"bounds":{"left":0.95212764,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open support menu","depth":9,"bounds":{"left":0.96675533,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open user menu","depth":9,"bounds":{"left":0.98138297,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"org avatar Current organization: jiminny","depth":9,"bounds":{"left":0.08693484,"top":0.10295291,"width":0.01462766,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Home","depth":10,"bounds":{"left":0.08494016,"top":0.15083799,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":12,"bounds":{"left":0.087765954,"top":0.1839585,"width":0.012965426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines","depth":10,"bounds":{"left":0.08494016,"top":0.21308859,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines","depth":12,"bounds":{"left":0.083942816,"top":0.2462091,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":10,"bounds":{"left":0.08494016,"top":0.2753392,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":12,"bounds":{"left":0.0852726,"top":0.3084597,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":10,"bounds":{"left":0.08494016,"top":0.33798882,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":12,"bounds":{"left":0.08543883,"top":0.37071028,"width":0.01761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":10,"bounds":{"left":0.08494016,"top":0.40023944,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":12,"bounds":{"left":0.085605055,"top":0.4329609,"width":0.017287234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Runners","depth":10,"bounds":{"left":0.08494016,"top":0.46249002,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Runners","depth":12,"bounds":{"left":0.0852726,"top":0.49561054,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Org","depth":10,"bounds":{"left":0.08494016,"top":0.52474064,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Org","depth":12,"bounds":{"left":0.090259306,"top":0.55786115,"width":0.007978723,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Plan","depth":10,"bounds":{"left":0.08494016,"top":0.58699125,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Plan","depth":12,"bounds":{"left":0.08959442,"top":0.6201117,"width":0.00930851,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk sidecars","depth":11,"bounds":{"left":0.07962101,"top":0.8591381,"width":0.02925532,"height":0.059457302},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk sidecars","depth":13,"bounds":{"left":0.08494016,"top":0.8922586,"width":0.01861702,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PREVIEW","depth":12,"bounds":{"left":0.08743351,"top":0.8567438,"width":0.013630319,"height":0.009177973},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk","depth":10,"bounds":{"left":0.07962101,"top":0.9345571,"width":0.02925532,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk","depth":12,"bounds":{"left":0.08726729,"top":0.96727854,"width":0.013962766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Smarter Testing is now in beta","depth":9,"bounds":{"left":0.1221742,"top":0.8707103,"width":0.10638298,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Smarter Testing is now in beta","depth":10,"bounds":{"left":0.1221742,"top":0.87031126,"width":0.07795878,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Get faster feedback on your tests while maintaining full confidence","depth":10,"bounds":{"left":0.1221742,"top":0.8934557,"width":0.098902926,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dismiss","depth":9,"bounds":{"left":0.16156915,"top":0.93615323,"width":0.027925532,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Get Started","depth":9,"bounds":{"left":0.19215426,"top":0.93615323,"width":0.036402926,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Get Started","depth":10,"bounds":{"left":0.1974734,"top":0.94213885,"width":0.025764627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard All Pipelines","depth":14,"bounds":{"left":0.1171875,"top":0.12290503,"width":0.040724736,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Pipelines","depth":16,"bounds":{"left":0.1278258,"top":0.12490024,"width":0.030086435,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"bounds":{"left":0.15924202,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Project Outline app","depth":14,"bounds":{"left":0.16356383,"top":0.12290503,"width":0.020113032,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":16,"bounds":{"left":0.17420213,"top":0.12490024,"width":0.009474734,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"bounds":{"left":0.18500665,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Git Branch JY-20773-fix-automated-reports-user-pilot-tracking","depth":14,"bounds":{"left":0.18932846,"top":0.12290503,"width":0.14261968,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773-fix-automated-reports-user-pilot-tracking","depth":16,"bounds":{"left":0.19996676,"top":0.12490024,"width":0.13198139,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"bounds":{"left":0.3332779,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines app #57889","depth":14,"bounds":{"left":0.33759972,"top":0.12290503,"width":0.04105718,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app #57889","depth":16,"bounds":{"left":0.34823802,"top":0.12490024,"width":0.030418882,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"bounds":{"left":0.3799867,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Workflows build_accept_deploy","depth":14,"bounds":{"left":0.38430852,"top":0.12290503,"width":0.06200133,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":16,"bounds":{"left":0.3949468,"top":0.12490024,"width":0.051363032,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"bounds":{"left":0.4476396,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jobs test (879945)","depth":14,"bounds":{"left":0.45196143,"top":0.12290503,"width":0.045877658,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"test (879945)","depth":16,"bounds":{"left":0.46259972,"top":0.12490024,"width":0.03523936,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"test","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Failed","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Fix Job","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Rebuild Rerun Arrow Drop Down","depth":12,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Rerun","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More Actions","depth":12,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Duration","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/ Finished","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"9m 21s","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"9m 21s","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"14d ago","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Queued","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Executor / Resource Class","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Docker","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Learn more about resource classes in the docs (opens in new tab)","depth":11,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ARM X-Large","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Info Outline","depth":11,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Branch","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20773-fix-automated-reports-user-pilot-tracking","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773-fix-automated-reports-user-pilot-tracking","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PR /","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"#12024","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"#","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12024","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6bd41c8","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Author","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"& Message","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Avatar of Lukas Kovalik","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking ofr automated report generated","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Steps","depth":12,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Steps","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Tests tests","depth":12,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tests","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Timing timing","depth":12,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Timing","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Artifacts artifacts","depth":12,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Artifacts","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Resources resources","depth":12,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resources","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Status Passed Spin up environment 43s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Spin up environment","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Spin up environment","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"43s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container cimg/mariadb:10.9.7 8m 39s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container cimg/mariadb:10.9.7","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container cimg/mariadb:10.9.7","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 39s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container redis:5 8m 39s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container redis:5","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container redis:5","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 39s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 39s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 39s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Preparing environment variables","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preparing environment variables","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Attaching workspace 12s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Attaching workspace","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Attaching workspace","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock) 10s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock)","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - Composer vendor cache (composer.lock)","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - frontend build output (public/, this SHA) 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - frontend build output (public/, this SHA)","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - frontend build output (public/, this SHA)","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - backend workspace cache","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - backend workspace cache","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Edit hosts file","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Edit hosts file","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed composer install /w dev dependencies 32s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed composer install /w dev dependencies","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"composer install /w dev dependencies","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"32s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":12,"bounds":{"left":0.117519945,"top":0.0,"width":0.87017953,"height":0.044692736},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":13,"bounds":{"left":0.117519945,"top":0.0,"width":0.8103391,"height":0.03830806},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":16,"bounds":{"left":0.1434508,"top":0.0,"width":0.032912236,"height":0.01396648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":14,"bounds":{"left":0.9318484,"top":0.0,"width":0.005319149,"height":0.01556265},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":13,"bounds":{"left":0.9424867,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":13,"bounds":{"left":0.95578456,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":13,"bounds":{"left":0.9690825,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":12,"bounds":{"left":0.117519945,"top":0.0,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create jobs table migration","depth":13,"bounds":{"left":0.117519945,"top":0.0,"width":0.8103391,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create jobs table migration","depth":16,"bounds":{"left":0.1434508,"top":0.0015961692,"width":0.06017287,"height":0.01396648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":14,"bounds":{"left":0.9318484,"top":0.0007980846,"width":0.005319149,"height":0.01556265},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":13,"bounds":{"left":0.9424867,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":13,"bounds":{"left":0.95578456,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":13,"bounds":{"left":0.9690825,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":12,"bounds":{"left":0.117519945,"top":0.039106146,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database migrations","depth":13,"bounds":{"left":0.117519945,"top":0.042298485,"width":0.80950797,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database migrations","depth":16,"bounds":{"left":0.1434508,"top":0.054269753,"width":0.05518617,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":14,"bounds":{"left":0.9310173,"top":0.05347167,"width":0.006150266,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":13,"bounds":{"left":0.9424867,"top":0.045490824,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":13,"bounds":{"left":0.95578456,"top":0.045490824,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
8660896161798465347
|
8036234067635107872
|
visual_change
|
accessibility
|
NULL
|
Unnamed Group
TypeError: League\Flysystem\Filesyst Unnamed Group
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
Close tab
CloudWatch | us-east-2
CloudWatch | us-east-2
Unnamed Group
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Pull requests · jiminny/app
Pull requests · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app
JY-20625 | JY-20742 | MCP POC by yalokin-jiminny · Pull Request #12036 · jiminny/app
Data Explorer
Data Explorer
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
Jiminny
Jiminny
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
Platform Team - Backlog - Jira
Platform Team - Backlog - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
test (879945) - jiminny/app
test (879945) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Smarter Testing is now in beta
Smarter Testing is now in beta
Get faster feedback on your tests while maintaining full confidence
Dismiss
Get Started
Get Started
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20773-fix-automated-reports-user-pilot-tracking
JY-20773-fix-automated-reports-user-pilot-tracking
/
Pipelines app #57889
app #57889
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (879945)
test (879945)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
9m 21s
9m 21s
/
Copy timestamp to clipboard
14d ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20773-fix-automated-reports-user-pilot-tracking
JY-20773-fix-automated-reports-user-pilot-tracking
PR /
Commit
#12024
#
12024
/
Open commit on version control site
6bd41c8
Author
& Message
Avatar of Lukas Kovalik
JY-20773 fix user pilot tracking ofr automated report generated
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 43s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
43s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 39s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 39s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 39s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 39s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 39s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 39s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 12s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
12s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 10s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
10s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 32s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
32s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
696
|
25
|
23
|
2026-05-07T07:24:08.393622+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778138648393_m1.jpg...
|
iTerm2
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsHelpSupport Daily iTerm2ShellEditViewSessionScriptsHelpSupport Daily • in 4 h 36 m100% C8Thu 7 May 10:24:08DOCKER2026-05-07110:16:05.04330422026-05-07T10:16:06.212558Z2026-05-07T10:16:10.088825Z2026-05-07T10:16:11.585397Z2026-05-07T10:16:11.626664Z2026-05-07T10:16:14.079057Z2026-05-07T10:16:16.219212Z2026-05-07T10:16:16.238237Z2026-05-07T10:16:17.211409Z2026-05-07T10:16:17.247202Z2026-05-07110:16:37.97375922026-05-07T10:16:38.014645Z2026-05-07T10:16:38.719453Z2026-05-07110:16:38.75745822026-05-07T10:16:39.323203Z2026-05-07T10:16:39.36117272026-05-07T10:16:402026-05-07T10:16:42.2026-05-07T10:16:44.2026-05-07T10:16:442026-05-07110:17:132026-05-07T10:17:23.2026-05-07T10:17:36.2026-05-07110:17:48.2026-05-07T10:18:06.2026-05-07110:18:21.3r2026-05-07T10:18:27.400579Z2026-05-07T10:18:36.379491Z2026-05-07T10:18:39.375238Z2026-05-07T10:19:43.208935Z2026-05-07110:19:49.257421ZProfilesWindowscreenpipe• ₴1INFOINFOINFOINFOINFOINFOINFOINFOINFOINFOINFOINFOINFOINFOINFODEV (-zsh)• ₴2APP (-zsh)83-zsh• ₴4screenpipe"screenpipe_engine::event_driven_capture:contentdedup:skippingcapturefor monitor 2screenpipe_engine::event_driven_capture:contentdedup:(hash=312614534752492596, trigger=visual_change)skippingcapturefor monitor 2screenpipe_engine::event_driven_capture:contentdedup:skippingcapturefor(hash=312614534752492596,trigger=click)monitor 2screenpipe_engine::event_driven_capture:content(hash=-6145754442538527174, trigger=click)dedup:skippingcapturefor monitor 1(hash=-6145754442538327174, trigger=click)screenpipe_engine::event_driven_capture:contentdedup:skippingcapturefor monitor 2(hash=-6145754442538527174, trigger=click)screenpipe_engine::event_driven_capture:contentdedup:skippingcaptureforscreenpipe_engine::event_driven_capture:monitor 2 (hash=806643008695069553, trigger=visual_change)contentdedup:skippingcapturefor monitor 2 Chash=806643008695069553,trigger=click)screenpipe_engine::event_driven_capture:contentdedup:skippingcapturefor monitor 1(hash=806643008695069553, trigger=click)screenpipe_engine::event_driven_capture:contentdedup:skippingcaptureformonitor 2screenpipe_engine::event_driven_capture:contentdedup:skippingcaptureforChash=806643008695069553,trigger=click)monitor 1(hash=806643008695069553, trigger=click)screenpipe_engine::event_driven_capture:contentdedup:skippingcapturefor monitor 2screenpipe_engine::event_driven capture:contentdedup:skippingcapturefor(hash=-8875948178524934281, trigger=click)screenpipe_engine::event_driven_capture:contentdedup:skippingcaptureformonitor 1 (hash=-8875948178524934281, trigger=click)monitor 1 (hash=-8875948178524934281,trigger=click)screenpipe_engine::event_driven_capture:contentdedup:skippingcapturefor monitor 2 (hash=-8875948178524934281, trigger=click)screenpipeengine::event_driven_capture:contentdedup:skippingcaptureformonitor 2 (hash=-8875948178524934281, trigger=click)(hachkninonn-click)331isual_change)ck)ick)sual_change)ick)sual_change)Slack(sual_change)INFOscreenpipe_engine::event_driven_capture:contentdedup: skipping capture for monitor 2 Chash=8392580966194121284,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 2 (hash=7524776963116161484,INFOtrigger=visual_change)screenpipe_engine:: event_driven_capture: content dedup:skipping capture for monitor 2 Chash=7524776963116161484,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 2 (hash=-6840747455939898472, trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-6840747455939898472, trigger=visual_change)tip: installa starterbundle ofpipes:screenpipe install https://screenpi.pe/start.json2026-05-07110:21:21.84837522026-05-07T10:21:23.439805Z2026-05-07T10:21:38.803777Z2026-05-07T10:21:44.054102Z2026-05-07T10:21:46.307600Z2026-05-07110:21:49.031129Z2026-05-07T10:23:02.085605Z2026-05-07T10:23:05.086593Z2026-05-07110:24:05.6617762INFOscreenpipe_engine::event_driven_capture: contentdedup: skipping capture for monitor 2 (hash=201887528283740068, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=201887528283740068,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4689651471004117672, trigger=click)INFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: found 84 eligibleframesINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 38 frames, 5.OMB → 1.3MB (3.8x),38 JPEGSdeletedINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 44 frames, 7.2MB→1.4MB (5.2x),44 JPEGs deletedINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-2104275679555505311, trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-2104275679555505311,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=763931354791105339, trigger=visual_change)...
|
NULL
|
8660766559737150569
|
NULL
|
visual_change
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsHelpSupport Daily iTerm2ShellEditViewSessionScriptsHelpSupport Daily • in 4 h 36 m100% C8Thu 7 May 10:24:08DOCKER2026-05-07110:16:05.04330422026-05-07T10:16:06.212558Z2026-05-07T10:16:10.088825Z2026-05-07T10:16:11.585397Z2026-05-07T10:16:11.626664Z2026-05-07T10:16:14.079057Z2026-05-07T10:16:16.219212Z2026-05-07T10:16:16.238237Z2026-05-07T10:16:17.211409Z2026-05-07T10:16:17.247202Z2026-05-07110:16:37.97375922026-05-07T10:16:38.014645Z2026-05-07T10:16:38.719453Z2026-05-07110:16:38.75745822026-05-07T10:16:39.323203Z2026-05-07T10:16:39.36117272026-05-07T10:16:402026-05-07T10:16:42.2026-05-07T10:16:44.2026-05-07T10:16:442026-05-07110:17:132026-05-07T10:17:23.2026-05-07T10:17:36.2026-05-07110:17:48.2026-05-07T10:18:06.2026-05-07110:18:21.3r2026-05-07T10:18:27.400579Z2026-05-07T10:18:36.379491Z2026-05-07T10:18:39.375238Z2026-05-07T10:19:43.208935Z2026-05-07110:19:49.257421ZProfilesWindowscreenpipe• ₴1INFOINFOINFOINFOINFOINFOINFOINFOINFOINFOINFOINFOINFOINFOINFODEV (-zsh)• ₴2APP (-zsh)83-zsh• ₴4screenpipe"screenpipe_engine::event_driven_capture:contentdedup:skippingcapturefor monitor 2screenpipe_engine::event_driven_capture:contentdedup:(hash=312614534752492596, trigger=visual_change)skippingcapturefor monitor 2screenpipe_engine::event_driven_capture:contentdedup:skippingcapturefor(hash=312614534752492596,trigger=click)monitor 2screenpipe_engine::event_driven_capture:content(hash=-6145754442538527174, trigger=click)dedup:skippingcapturefor monitor 1(hash=-6145754442538327174, trigger=click)screenpipe_engine::event_driven_capture:contentdedup:skippingcapturefor monitor 2(hash=-6145754442538527174, trigger=click)screenpipe_engine::event_driven_capture:contentdedup:skippingcaptureforscreenpipe_engine::event_driven_capture:monitor 2 (hash=806643008695069553, trigger=visual_change)contentdedup:skippingcapturefor monitor 2 Chash=806643008695069553,trigger=click)screenpipe_engine::event_driven_capture:contentdedup:skippingcapturefor monitor 1(hash=806643008695069553, trigger=click)screenpipe_engine::event_driven_capture:contentdedup:skippingcaptureformonitor 2screenpipe_engine::event_driven_capture:contentdedup:skippingcaptureforChash=806643008695069553,trigger=click)monitor 1(hash=806643008695069553, trigger=click)screenpipe_engine::event_driven_capture:contentdedup:skippingcapturefor monitor 2screenpipe_engine::event_driven capture:contentdedup:skippingcapturefor(hash=-8875948178524934281, trigger=click)screenpipe_engine::event_driven_capture:contentdedup:skippingcaptureformonitor 1 (hash=-8875948178524934281, trigger=click)monitor 1 (hash=-8875948178524934281,trigger=click)screenpipe_engine::event_driven_capture:contentdedup:skippingcapturefor monitor 2 (hash=-8875948178524934281, trigger=click)screenpipeengine::event_driven_capture:contentdedup:skippingcaptureformonitor 2 (hash=-8875948178524934281, trigger=click)(hachkninonn-click)331isual_change)ck)ick)sual_change)ick)sual_change)Slack(sual_change)INFOscreenpipe_engine::event_driven_capture:contentdedup: skipping capture for monitor 2 Chash=8392580966194121284,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 2 (hash=7524776963116161484,INFOtrigger=visual_change)screenpipe_engine:: event_driven_capture: content dedup:skipping capture for monitor 2 Chash=7524776963116161484,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 2 (hash=-6840747455939898472, trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-6840747455939898472, trigger=visual_change)tip: installa starterbundle ofpipes:screenpipe install https://screenpi.pe/start.json2026-05-07110:21:21.84837522026-05-07T10:21:23.439805Z2026-05-07T10:21:38.803777Z2026-05-07T10:21:44.054102Z2026-05-07T10:21:46.307600Z2026-05-07110:21:49.031129Z2026-05-07T10:23:02.085605Z2026-05-07T10:23:05.086593Z2026-05-07110:24:05.6617762INFOscreenpipe_engine::event_driven_capture: contentdedup: skipping capture for monitor 2 (hash=201887528283740068, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=201887528283740068,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=4689651471004117672, trigger=click)INFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: found 84 eligibleframesINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 38 frames, 5.OMB → 1.3MB (3.8x),38 JPEGSdeletedINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 44 frames, 7.2MB→1.4MB (5.2x),44 JPEGs deletedINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-2104275679555505311, trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-2104275679555505311,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=763931354791105339, trigger=visual_change)...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
2897
|
116
|
14
|
2026-05-07T11:47:27.096161+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154447096_m2.jpg...
|
iTerm2
|
DEV (docker)
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Thu May 7 09:44:56 on ttys006
Poetry Last login: Thu May 7 09:44:56 on ttys006
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20773-fix-automated-reports-user-pilot-tracking) $ dev
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'
Syncing opportunity for Hubspot
Your HubSpot account has become disconnected. Please login to Jiminny to reconnect. skipping...
root@docker_lamp_1:/home/jiminny# php artisan jiminny:token-info -A 1499 -R
----------------------------------------------------------------------------------------------------
access_token => CNeR-JHgMxIZQlNQMl8kQEwrAgwACAkUAhIJBB4BAQEDBxiCiYwCIN7Y_Qwo0qwCMhTnG549n-YtNuc1jgj-2AsLPSmw3DoyQlNQMl8kQEwrAiUACBkGawEFThwBARIBAQEEATEEAQEBAQEBAQEBAQUBEggBAQEBAYlCFPAsBNZxoDp5kAcRyeBlQoE5SM7DSgNuYTFSAFoAYABo3tj9DHAAeAA
----------------------------------------------------------------------------------------------------
access_token_expires_at => 2026-05-07 11:41:20
----------------------------------------------------------------------------------------------------
refresh_token => d5ab04e2-2109-4c0b-b513-8cba1dd54371
----------------------------------------------------------------------------------------------------
refresh_token_expires_at =>
----------------------------------------------------------------------------------------------------
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'
Syncing opportunity for Hubspot
Syncing opportunities modified since 2026-05-01 00:00:00...
Synced 6 opportunities.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 7.40ms DONE
cache [PASSWORD_DOTS] 35.37ms DONE
compiled [PASSWORD_DOTS] 2.98ms DONE
events [PASSWORD_DOTS] 1.70ms DONE
routes [PASSWORD_DOTS] 1.64ms DONE
views [PASSWORD_DOTS] 6.48ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-emails:worker-emails_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.95ms DONE
cache [PASSWORD_DOTS] 9.00ms DONE
compiled [PASSWORD_DOTS] 2.63ms DONE
events [PASSWORD_DOTS] 2.35ms DONE
routes [PASSWORD_DOTS] 1.64ms DONE
views [PASSWORD_DOTS] 3.18ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-download:worker-download_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'
Syncing opportunity for Hubspot
Syncing opportunities modified since 2026-05-01 00:00:00...
Synced 6 opportunities.
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564
Syncing opportunity for Hubspot
Syncing opportunity 374720564...
Synced AmirHSOpp to 5066
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-contact --teamId=2 --contactId 21351
Syncing contact(s) for Hubspot
Syncing contact 21351...
Synced Lissy Newland to 464
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 8.08ms DONE
cache [PASSWORD_DOTS] 19.93ms DONE
compiled [PASSWORD_DOTS] 3.28ms DONE
events [PASSWORD_DOTS] 4.77ms DONE
routes [PASSWORD_DOTS] 2.64ms DONE
views [PASSWORD_DOTS] 20.16ms DONE
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-audio:worker-audio_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-emails:worker-emails_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-es-update:worker-es-update_00: stopped
worker-calendar:worker-calendar_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564
DOCKER
Close Tab
DEV (docker)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
⌥⌘1
DEV (docker)...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Thu May 7 09:44:56 on ttys006\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20773-fix-automated-reports-user-pilot-tracking) $ dev\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'\nSyncing opportunity for Hubspot\nYour HubSpot account has become disconnected. Please login to Jiminny to reconnect. skipping...\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:token-info -A 1499 -R\n----------------------------------------------------------------------------------------------------\naccess_token => CNeR-JHgMxIZQlNQMl8kQEwrAgwACAkUAhIJBB4BAQEDBxiCiYwCIN7Y_Qwo0qwCMhTnG549n-YtNuc1jgj-2AsLPSmw3DoyQlNQMl8kQEwrAiUACBkGawEFThwBARIBAQEEATEEAQEBAQEBAQEBAQUBEggBAQEBAYlCFPAsBNZxoDp5kAcRyeBlQoE5SM7DSgNuYTFSAFoAYABo3tj9DHAAeAA\n----------------------------------------------------------------------------------------------------\naccess_token_expires_at => 2026-05-07 11:41:20\n----------------------------------------------------------------------------------------------------\nrefresh_token => d5ab04e2-2109-4c0b-b513-8cba1dd54371\n----------------------------------------------------------------------------------------------------\nrefresh_token_expires_at => \n----------------------------------------------------------------------------------------------------\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'\nSyncing opportunity for Hubspot\nSyncing opportunities modified since 2026-05-01 00:00:00...\nSynced 6 opportunities.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 7.40ms DONE\n cache ............................................................................................................................... 35.37ms DONE\n compiled ............................................................................................................................. 2.98ms DONE\n events ............................................................................................................................... 1.70ms DONE\n routes ............................................................................................................................... 1.64ms DONE\n views ................................................................................................................................ 6.48ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-emails:worker-emails_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.95ms DONE\n cache ................................................................................................................................ 9.00ms DONE\n compiled ............................................................................................................................. 2.63ms DONE\n events ............................................................................................................................... 2.35ms DONE\n routes ............................................................................................................................... 1.64ms DONE\n views ................................................................................................................................ 3.18ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'\nSyncing opportunity for Hubspot\nSyncing opportunities modified since 2026-05-01 00:00:00...\nSynced 6 opportunities.\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564 \nSyncing opportunity for Hubspot\nSyncing opportunity 374720564...\nSynced AmirHSOpp to 5066\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-contact --teamId=2 --contactId 21351\nSyncing contact(s) for Hubspot\nSyncing contact 21351...\nSynced Lissy Newland to 464\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 8.08ms DONE\n cache ............................................................................................................................... 19.93ms DONE\n compiled ............................................................................................................................. 3.28ms DONE\n events ............................................................................................................................... 4.77ms DONE\n routes ............................................................................................................................... 2.64ms DONE\n views ............................................................................................................................... 20.16ms DONE\n\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-emails:worker-emails_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-es-update:worker-es-update_00: stopped\nworker-calendar:worker-calendar_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564","depth":4,"on_screen":true,"value":"Last login: Thu May 7 09:44:56 on ttys006\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20773-fix-automated-reports-user-pilot-tracking) $ dev\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'\nSyncing opportunity for Hubspot\nYour HubSpot account has become disconnected. Please login to Jiminny to reconnect. skipping...\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:token-info -A 1499 -R\n----------------------------------------------------------------------------------------------------\naccess_token => CNeR-JHgMxIZQlNQMl8kQEwrAgwACAkUAhIJBB4BAQEDBxiCiYwCIN7Y_Qwo0qwCMhTnG549n-YtNuc1jgj-2AsLPSmw3DoyQlNQMl8kQEwrAiUACBkGawEFThwBARIBAQEEATEEAQEBAQEBAQEBAQUBEggBAQEBAYlCFPAsBNZxoDp5kAcRyeBlQoE5SM7DSgNuYTFSAFoAYABo3tj9DHAAeAA\n----------------------------------------------------------------------------------------------------\naccess_token_expires_at => 2026-05-07 11:41:20\n----------------------------------------------------------------------------------------------------\nrefresh_token => d5ab04e2-2109-4c0b-b513-8cba1dd54371\n----------------------------------------------------------------------------------------------------\nrefresh_token_expires_at => \n----------------------------------------------------------------------------------------------------\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'\nSyncing opportunity for Hubspot\nSyncing opportunities modified since 2026-05-01 00:00:00...\nSynced 6 opportunities.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 7.40ms DONE\n cache ............................................................................................................................... 35.37ms DONE\n compiled ............................................................................................................................. 2.98ms DONE\n events ............................................................................................................................... 1.70ms DONE\n routes ............................................................................................................................... 1.64ms DONE\n views ................................................................................................................................ 6.48ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-emails:worker-emails_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.95ms DONE\n cache ................................................................................................................................ 9.00ms DONE\n compiled ............................................................................................................................. 2.63ms DONE\n events ............................................................................................................................... 2.35ms DONE\n routes ............................................................................................................................... 1.64ms DONE\n views ................................................................................................................................ 3.18ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'\nSyncing opportunity for Hubspot\nSyncing opportunities modified since 2026-05-01 00:00:00...\nSynced 6 opportunities.\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564 \nSyncing opportunity for Hubspot\nSyncing opportunity 374720564...\nSynced AmirHSOpp to 5066\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-contact --teamId=2 --contactId 21351\nSyncing contact(s) for Hubspot\nSyncing contact 21351...\nSynced Lissy Newland to 464\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 8.08ms DONE\n cache ............................................................................................................................... 19.93ms DONE\n compiled ............................................................................................................................. 3.28ms DONE\n events ............................................................................................................................... 4.77ms DONE\n routes ............................................................................................................................... 2.64ms DONE\n views ............................................................................................................................... 20.16ms DONE\n\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-emails:worker-emails_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-es-update:worker-es-update_00: stopped\nworker-calendar:worker-calendar_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.27227393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (docker)","depth":2,"bounds":{"left":0.34906915,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.35106382,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.42785904,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42985374,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5064827,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.5084774,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.5851064,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.58710104,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.66373,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.66572475,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7287234,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"DEV (docker)","depth":1,"bounds":{"left":0.49534574,"top":1.0,"width":0.029920213,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
8659530625071720597
|
2125967957852072196
|
visual_change
|
accessibility
|
NULL
|
Last login: Thu May 7 09:44:56 on ttys006
Poetry Last login: Thu May 7 09:44:56 on ttys006
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20773-fix-automated-reports-user-pilot-tracking) $ dev
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'
Syncing opportunity for Hubspot
Your HubSpot account has become disconnected. Please login to Jiminny to reconnect. skipping...
root@docker_lamp_1:/home/jiminny# php artisan jiminny:token-info -A 1499 -R
----------------------------------------------------------------------------------------------------
access_token => CNeR-JHgMxIZQlNQMl8kQEwrAgwACAkUAhIJBB4BAQEDBxiCiYwCIN7Y_Qwo0qwCMhTnG549n-YtNuc1jgj-2AsLPSmw3DoyQlNQMl8kQEwrAiUACBkGawEFThwBARIBAQEEATEEAQEBAQEBAQEBAQUBEggBAQEBAYlCFPAsBNZxoDp5kAcRyeBlQoE5SM7DSgNuYTFSAFoAYABo3tj9DHAAeAA
----------------------------------------------------------------------------------------------------
access_token_expires_at => 2026-05-07 11:41:20
----------------------------------------------------------------------------------------------------
refresh_token => d5ab04e2-2109-4c0b-b513-8cba1dd54371
----------------------------------------------------------------------------------------------------
refresh_token_expires_at =>
----------------------------------------------------------------------------------------------------
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'
Syncing opportunity for Hubspot
Syncing opportunities modified since 2026-05-01 00:00:00...
Synced 6 opportunities.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 7.40ms DONE
cache [PASSWORD_DOTS] 35.37ms DONE
compiled [PASSWORD_DOTS] 2.98ms DONE
events [PASSWORD_DOTS] 1.70ms DONE
routes [PASSWORD_DOTS] 1.64ms DONE
views [PASSWORD_DOTS] 6.48ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-emails:worker-emails_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.95ms DONE
cache [PASSWORD_DOTS] 9.00ms DONE
compiled [PASSWORD_DOTS] 2.63ms DONE
events [PASSWORD_DOTS] 2.35ms DONE
routes [PASSWORD_DOTS] 1.64ms DONE
views [PASSWORD_DOTS] 3.18ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-download:worker-download_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'
Syncing opportunity for Hubspot
Syncing opportunities modified since 2026-05-01 00:00:00...
Synced 6 opportunities.
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564
Syncing opportunity for Hubspot
Syncing opportunity 374720564...
Synced AmirHSOpp to 5066
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-contact --teamId=2 --contactId 21351
Syncing contact(s) for Hubspot
Syncing contact 21351...
Synced Lissy Newland to 464
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 8.08ms DONE
cache [PASSWORD_DOTS] 19.93ms DONE
compiled [PASSWORD_DOTS] 3.28ms DONE
events [PASSWORD_DOTS] 4.77ms DONE
routes [PASSWORD_DOTS] 2.64ms DONE
views [PASSWORD_DOTS] 20.16ms DONE
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-audio:worker-audio_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-emails:worker-emails_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-es-update:worker-es-update_00: stopped
worker-calendar:worker-calendar_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564
DOCKER
Close Tab
DEV (docker)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
⌥⌘1
DEV (docker)...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
2898
|
115
|
11
|
2026-05-07T11:47:27.238408+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154447238_m1.jpg...
|
iTerm2
|
DEV (docker)
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Thu May 7 09:44:56 on ttys006
Poetry Last login: Thu May 7 09:44:56 on ttys006
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20773-fix-automated-reports-user-pilot-tracking) $ dev
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'
Syncing opportunity for Hubspot
Your HubSpot account has become disconnected. Please login to Jiminny to reconnect. skipping...
root@docker_lamp_1:/home/jiminny# php artisan jiminny:token-info -A 1499 -R
----------------------------------------------------------------------------------------------------
access_token => CNeR-JHgMxIZQlNQMl8kQEwrAgwACAkUAhIJBB4BAQEDBxiCiYwCIN7Y_Qwo0qwCMhTnG549n-YtNuc1jgj-2AsLPSmw3DoyQlNQMl8kQEwrAiUACBkGawEFThwBARIBAQEEATEEAQEBAQEBAQEBAQUBEggBAQEBAYlCFPAsBNZxoDp5kAcRyeBlQoE5SM7DSgNuYTFSAFoAYABo3tj9DHAAeAA
----------------------------------------------------------------------------------------------------
access_token_expires_at => 2026-05-07 11:41:20
----------------------------------------------------------------------------------------------------
refresh_token => d5ab04e2-2109-4c0b-b513-8cba1dd54371
----------------------------------------------------------------------------------------------------
refresh_token_expires_at =>
----------------------------------------------------------------------------------------------------
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'
Syncing opportunity for Hubspot
Syncing opportunities modified since 2026-05-01 00:00:00...
Synced 6 opportunities.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 7.40ms DONE
cache [PASSWORD_DOTS] 35.37ms DONE
compiled [PASSWORD_DOTS] 2.98ms DONE
events [PASSWORD_DOTS] 1.70ms DONE
routes [PASSWORD_DOTS] 1.64ms DONE
views [PASSWORD_DOTS] 6.48ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-emails:worker-emails_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.95ms DONE
cache [PASSWORD_DOTS] 9.00ms DONE
compiled [PASSWORD_DOTS] 2.63ms DONE
events [PASSWORD_DOTS] 2.35ms DONE
routes [PASSWORD_DOTS] 1.64ms DONE
views [PASSWORD_DOTS] 3.18ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-download:worker-download_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'
Syncing opportunity for Hubspot
Syncing opportunities modified since 2026-05-01 00:00:00...
Synced 6 opportunities.
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564
Syncing opportunity for Hubspot
Syncing opportunity 374720564...
Synced AmirHSOpp to 5066
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-contact --teamId=2 --contactId 21351
Syncing contact(s) for Hubspot
Syncing contact 21351...
Synced Lissy Newland to 464
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 8.08ms DONE
cache [PASSWORD_DOTS] 19.93ms DONE
compiled [PASSWORD_DOTS] 3.28ms DONE
events [PASSWORD_DOTS] 4.77ms DONE
routes [PASSWORD_DOTS] 2.64ms DONE
views [PASSWORD_DOTS] 20.16ms DONE
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-audio:worker-audio_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-emails:worker-emails_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-es-update:worker-es-update_00: stopped
worker-calendar:worker-calendar_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564
DOCKER
Close Tab
DEV (docker)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
⌥⌘1
DEV (docker)...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Thu May 7 09:44:56 on ttys006\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20773-fix-automated-reports-user-pilot-tracking) $ dev\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'\nSyncing opportunity for Hubspot\nYour HubSpot account has become disconnected. Please login to Jiminny to reconnect. skipping...\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:token-info -A 1499 -R\n----------------------------------------------------------------------------------------------------\naccess_token => CNeR-JHgMxIZQlNQMl8kQEwrAgwACAkUAhIJBB4BAQEDBxiCiYwCIN7Y_Qwo0qwCMhTnG549n-YtNuc1jgj-2AsLPSmw3DoyQlNQMl8kQEwrAiUACBkGawEFThwBARIBAQEEATEEAQEBAQEBAQEBAQUBEggBAQEBAYlCFPAsBNZxoDp5kAcRyeBlQoE5SM7DSgNuYTFSAFoAYABo3tj9DHAAeAA\n----------------------------------------------------------------------------------------------------\naccess_token_expires_at => 2026-05-07 11:41:20\n----------------------------------------------------------------------------------------------------\nrefresh_token => d5ab04e2-2109-4c0b-b513-8cba1dd54371\n----------------------------------------------------------------------------------------------------\nrefresh_token_expires_at => \n----------------------------------------------------------------------------------------------------\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'\nSyncing opportunity for Hubspot\nSyncing opportunities modified since 2026-05-01 00:00:00...\nSynced 6 opportunities.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 7.40ms DONE\n cache ............................................................................................................................... 35.37ms DONE\n compiled ............................................................................................................................. 2.98ms DONE\n events ............................................................................................................................... 1.70ms DONE\n routes ............................................................................................................................... 1.64ms DONE\n views ................................................................................................................................ 6.48ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-emails:worker-emails_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.95ms DONE\n cache ................................................................................................................................ 9.00ms DONE\n compiled ............................................................................................................................. 2.63ms DONE\n events ............................................................................................................................... 2.35ms DONE\n routes ............................................................................................................................... 1.64ms DONE\n views ................................................................................................................................ 3.18ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'\nSyncing opportunity for Hubspot\nSyncing opportunities modified since 2026-05-01 00:00:00...\nSynced 6 opportunities.\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564 \nSyncing opportunity for Hubspot\nSyncing opportunity 374720564...\nSynced AmirHSOpp to 5066\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-contact --teamId=2 --contactId 21351\nSyncing contact(s) for Hubspot\nSyncing contact 21351...\nSynced Lissy Newland to 464\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 8.08ms DONE\n cache ............................................................................................................................... 19.93ms DONE\n compiled ............................................................................................................................. 3.28ms DONE\n events ............................................................................................................................... 4.77ms DONE\n routes ............................................................................................................................... 2.64ms DONE\n views ............................................................................................................................... 20.16ms DONE\n\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-emails:worker-emails_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-es-update:worker-es-update_00: stopped\nworker-calendar:worker-calendar_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564","depth":4,"on_screen":true,"value":"Last login: Thu May 7 09:44:56 on ttys006\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20773-fix-automated-reports-user-pilot-tracking) $ dev\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'\nSyncing opportunity for Hubspot\nYour HubSpot account has become disconnected. Please login to Jiminny to reconnect. skipping...\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:token-info -A 1499 -R\n----------------------------------------------------------------------------------------------------\naccess_token => CNeR-JHgMxIZQlNQMl8kQEwrAgwACAkUAhIJBB4BAQEDBxiCiYwCIN7Y_Qwo0qwCMhTnG549n-YtNuc1jgj-2AsLPSmw3DoyQlNQMl8kQEwrAiUACBkGawEFThwBARIBAQEEATEEAQEBAQEBAQEBAQUBEggBAQEBAYlCFPAsBNZxoDp5kAcRyeBlQoE5SM7DSgNuYTFSAFoAYABo3tj9DHAAeAA\n----------------------------------------------------------------------------------------------------\naccess_token_expires_at => 2026-05-07 11:41:20\n----------------------------------------------------------------------------------------------------\nrefresh_token => d5ab04e2-2109-4c0b-b513-8cba1dd54371\n----------------------------------------------------------------------------------------------------\nrefresh_token_expires_at => \n----------------------------------------------------------------------------------------------------\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'\nSyncing opportunity for Hubspot\nSyncing opportunities modified since 2026-05-01 00:00:00...\nSynced 6 opportunities.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 7.40ms DONE\n cache ............................................................................................................................... 35.37ms DONE\n compiled ............................................................................................................................. 2.98ms DONE\n events ............................................................................................................................... 1.70ms DONE\n routes ............................................................................................................................... 1.64ms DONE\n views ................................................................................................................................ 6.48ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-emails:worker-emails_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.95ms DONE\n cache ................................................................................................................................ 9.00ms DONE\n compiled ............................................................................................................................. 2.63ms DONE\n events ............................................................................................................................... 2.35ms DONE\n routes ............................................................................................................................... 1.64ms DONE\n views ................................................................................................................................ 3.18ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'\nSyncing opportunity for Hubspot\nSyncing opportunities modified since 2026-05-01 00:00:00...\nSynced 6 opportunities.\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564 \nSyncing opportunity for Hubspot\nSyncing opportunity 374720564...\nSynced AmirHSOpp to 5066\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-contact --teamId=2 --contactId 21351\nSyncing contact(s) for Hubspot\nSyncing contact 21351...\nSynced Lissy Newland to 464\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 8.08ms DONE\n cache ............................................................................................................................... 19.93ms DONE\n compiled ............................................................................................................................. 3.28ms DONE\n events ............................................................................................................................... 4.77ms DONE\n routes ............................................................................................................................... 2.64ms DONE\n views ............................................................................................................................... 20.16ms DONE\n\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-emails:worker-emails_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-es-update:worker-es-update_00: stopped\nworker-calendar:worker-calendar_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (docker)","depth":2,"bounds":{"left":0.16458334,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.16875,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.32916668,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33333334,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.49340278,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.49756944,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.6576389,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.66180557,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.821875,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.82604164,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.95763886,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"DEV (docker)","depth":1,"bounds":{"left":0.47013888,"top":0.033333335,"width":0.0625,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
8659530625071720597
|
2125967957852072196
|
click
|
accessibility
|
NULL
|
Last login: Thu May 7 09:44:56 on ttys006
Poetry Last login: Thu May 7 09:44:56 on ttys006
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20773-fix-automated-reports-user-pilot-tracking) $ dev
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'
Syncing opportunity for Hubspot
Your HubSpot account has become disconnected. Please login to Jiminny to reconnect. skipping...
root@docker_lamp_1:/home/jiminny# php artisan jiminny:token-info -A 1499 -R
----------------------------------------------------------------------------------------------------
access_token => CNeR-JHgMxIZQlNQMl8kQEwrAgwACAkUAhIJBB4BAQEDBxiCiYwCIN7Y_Qwo0qwCMhTnG549n-YtNuc1jgj-2AsLPSmw3DoyQlNQMl8kQEwrAiUACBkGawEFThwBARIBAQEEATEEAQEBAQEBAQEBAQUBEggBAQEBAYlCFPAsBNZxoDp5kAcRyeBlQoE5SM7DSgNuYTFSAFoAYABo3tj9DHAAeAA
----------------------------------------------------------------------------------------------------
access_token_expires_at => 2026-05-07 11:41:20
----------------------------------------------------------------------------------------------------
refresh_token => d5ab04e2-2109-4c0b-b513-8cba1dd54371
----------------------------------------------------------------------------------------------------
refresh_token_expires_at =>
----------------------------------------------------------------------------------------------------
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'
Syncing opportunity for Hubspot
Syncing opportunities modified since 2026-05-01 00:00:00...
Synced 6 opportunities.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 7.40ms DONE
cache [PASSWORD_DOTS] 35.37ms DONE
compiled [PASSWORD_DOTS] 2.98ms DONE
events [PASSWORD_DOTS] 1.70ms DONE
routes [PASSWORD_DOTS] 1.64ms DONE
views [PASSWORD_DOTS] 6.48ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-emails:worker-emails_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.95ms DONE
cache [PASSWORD_DOTS] 9.00ms DONE
compiled [PASSWORD_DOTS] 2.63ms DONE
events [PASSWORD_DOTS] 2.35ms DONE
routes [PASSWORD_DOTS] 1.64ms DONE
views [PASSWORD_DOTS] 3.18ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-download:worker-download_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'
Syncing opportunity for Hubspot
Syncing opportunities modified since 2026-05-01 00:00:00...
Synced 6 opportunities.
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564
Syncing opportunity for Hubspot
Syncing opportunity 374720564...
Synced AmirHSOpp to 5066
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-contact --teamId=2 --contactId 21351
Syncing contact(s) for Hubspot
Syncing contact 21351...
Synced Lissy Newland to 464
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 8.08ms DONE
cache [PASSWORD_DOTS] 19.93ms DONE
compiled [PASSWORD_DOTS] 3.28ms DONE
events [PASSWORD_DOTS] 4.77ms DONE
routes [PASSWORD_DOTS] 2.64ms DONE
views [PASSWORD_DOTS] 20.16ms DONE
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-audio:worker-audio_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-emails:worker-emails_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-es-update:worker-es-update_00: stopped
worker-calendar:worker-calendar_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564
DOCKER
Close Tab
DEV (docker)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
⌥⌘1
DEV (docker)...
|
2895
|
NULL
|
NULL
|
NULL
|
|
12775
|
563
|
9
|
2026-05-09T09:29:40.129803+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778318980129_m1.jpg...
|
iTerm2
|
ssh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/fin Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker compose logs backend --tail=60
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
backend-1 | [IP_ADDRESS] - - [09/May/2026:06:59:49 +0000] "GET /api/payments/meta/filters HTTP/1.1" 304 - "[URL_WITH_CREDENTIALS] │
backend-1 | │ npm i @prisma/client@latest │
backend-1 | └─────────────────────────────────────────────────────────┘
backend-1 | Finance Hub API running on port 3001
backend-1 | [IP_ADDRESS] - - [09/May/2026:08:15:05 +0000] "GET /api/payments/meta/filters HTTP/1.1" 304 - "[URL_WITH_CREDENTIALS] cd /volume2/docker/finance/finance-hub
sudo docker compose up -d --build backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.9s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 1.0s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.0s
=> => transferring context: 13.11kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:13a2f7dcf0adc691967e5364f8757ef382320b21006b1ac7d24adc1799c685a3 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Started 10.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend frontend && sudo docker compose up -d
[sudo] password for Adm1n:
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 3.3s (21/21) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [frontend internal] load metadata for docker.io/library/node:20-alpine 1.5s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 25.13kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:02d3fe405f031f93190cd6a129dd2b46cd9f7fa8024d10b9b28cde38ab699494 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
=> [frontend internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 204B 0.0s
=> [frontend internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [frontend internal] load build context 0.1s
=> => transferring context: 15.38kB 0.0s
=> CACHED [frontend 2/5] WORKDIR /app 0.0s
=> CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [frontend 4/5] RUN npm install 0.0s
=> [frontend 5/5] COPY . . 0.2s
=> [frontend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:7d1a56407bd7715bdcba452a02c8677926f7117c843d2e44ddd9f6317accb228 0.0s
=> => naming to docker.io/library/finance-hub-frontend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 4/4
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-adminer-1 Running 0.0s
✔ Container finance-hub-backend-1 Started 10.5s
✔ Container finance-hub-frontend-1 Started 0.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend && sudo docker compose up -d backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.6s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 0.8s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 25.55kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Started 10.5s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build frontend && sudo docker compose up -d frontend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.9s (10/10) FINISHED docker:default
=> [frontend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 204B 0.0s
=> [frontend internal] load metadata for docker.io/library/node:20-alpine 1.1s
=> [frontend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [frontend internal] load build context 0.1s
=> => transferring context: 48.01kB 0.0s
=> CACHED [frontend 2/5] WORKDIR /app 0.0s
=> CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [frontend 4/5] RUN npm install 0.0s
=> [frontend 5/5] COPY . . 0.2s
=> [frontend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:c45ced4de6924d6e7d9c567ae6242ce5fab8944c0cd2e8d627ef614e1ca71640 0.0s
=> => naming to docker.io/library/finance-hub-frontend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 3/3
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Running 0.0s
✔ Container finance-hub-frontend-1 Started 0.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c "SELECT id, date, recipient, amount, source, created_at FROM payments ORDER BY id DESC LIMIT 5;" 2>/dev/null || docker ps --format "{{.Names}}" | grep finance
[sudo] password for Adm1n:
Sorry, try again.
[sudo] password for Adm1n:
id | date | recipient | amount | source | created_at
----+---------------------+-----------------------------------------+--------+--------+-------------------------
8 | 2026-05-08 00:00:00 | POL BALICE Lagardere Travel R KR3 | 5.49 | UPLOAD | 2026-05-09 08:26:53.656
7 | 2026-05-08 00:00:00 | BGR SOFIA CBA EKO MARKET | 5.51 | UPLOAD | 2026-05-09 08:26:53.642
6 | 2026-05-08 00:00:00 | BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | 67.81 | UPLOAD | 2026-05-09 08:26:53.624
5 | 2026-05-08 00:00:00 | | 9.04 | UPLOAD | 2026-05-09 08:26:53.599
4 | 2026-05-08 00:00:00 | | 15.46 | UPLOAD | 2026-05-09 08:26:53.59
(5 rows)
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend && sudo docker compose up -d backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 3.2s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 2.8s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 937B 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> CACHED [backend 8/8] COPY src ./src 0.0s
=> [backend] exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Running 0.0s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \
"DELETE FROM payments WHERE source = 'UPLOAD';"
DELETE 6
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
ssh
Close Tab
⌥⌘1
ssh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker compose logs backend --tail=60\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \nbackend-1 | 172.16.14.5 - - [09/May/2026:06:59:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:04:44 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:09:33 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | Prisma schema loaded from prisma/schema.prisma\nbackend-1 | Datasource \"db\": PostgreSQL database \"finance_hub\", schema \"public\" at \"db:5432\"\nbackend-1 | \nbackend-1 | 1 migration found in prisma/migrations\nbackend-1 | \nbackend-1 | \nbackend-1 | No pending migrations to apply.\nbackend-1 | ┌─────────────────────────────────────────────────────────┐\nbackend-1 | │ Update available 5.22.0 -> 7.8.0 │\nbackend-1 | │ │\nbackend-1 | │ This is a major update - please follow the guide at │\nbackend-1 | │ https://pris.ly/d/major-version-upgrade │\nbackend-1 | │ │\nbackend-1 | │ Run the following to update │\nbackend-1 | │ npm i --save-dev prisma@latest │\nbackend-1 | │ npm i @prisma/client@latest │\nbackend-1 | └─────────────────────────────────────────────────────────┘\nbackend-1 | Finance Hub API running on port 3001\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:19 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:27 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 273 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:30 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:21:03 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose up -d --build backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.9s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 1.0s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.0s\n => => transferring context: 13.11kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:13a2f7dcf0adc691967e5364f8757ef382320b21006b1ac7d24adc1799c685a3 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Started 10.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend frontend && sudo docker compose up -d\n[sudo] password for Adm1n: \nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 3.3s (21/21) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [frontend internal] load metadata for docker.io/library/node:20-alpine 1.5s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 25.13kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:02d3fe405f031f93190cd6a129dd2b46cd9f7fa8024d10b9b28cde38ab699494 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\n => [frontend internal] load build definition from Dockerfile 0.0s\n => => transferring dockerfile: 204B 0.0s\n => [frontend internal] load .dockerignore 0.1s\n => => transferring context: 2B 0.0s\n => [frontend internal] load build context 0.1s\n => => transferring context: 15.38kB 0.0s\n => CACHED [frontend 2/5] WORKDIR /app 0.0s\n => CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [frontend 4/5] RUN npm install 0.0s\n => [frontend 5/5] COPY . . 0.2s\n => [frontend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:7d1a56407bd7715bdcba452a02c8677926f7117c843d2e44ddd9f6317accb228 0.0s\n => => naming to docker.io/library/finance-hub-frontend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 4/4\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-adminer-1 Running 0.0s \n ✔ Container finance-hub-backend-1 Started 10.5s \n ✔ Container finance-hub-frontend-1 Started 0.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend && sudo docker compose up -d backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.6s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 0.8s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 25.55kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Started 10.5s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build frontend && sudo docker compose up -d frontend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.9s (10/10) FINISHED docker:default\n => [frontend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 204B 0.0s\n => [frontend internal] load metadata for docker.io/library/node:20-alpine 1.1s\n => [frontend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [frontend internal] load build context 0.1s\n => => transferring context: 48.01kB 0.0s\n => CACHED [frontend 2/5] WORKDIR /app 0.0s\n => CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [frontend 4/5] RUN npm install 0.0s\n => [frontend 5/5] COPY . . 0.2s\n => [frontend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:c45ced4de6924d6e7d9c567ae6242ce5fab8944c0cd2e8d627ef614e1ca71640 0.0s\n => => naming to docker.io/library/finance-hub-frontend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 3/3\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Running 0.0s \n ✔ Container finance-hub-frontend-1 Started 0.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \"SELECT id, date, recipient, amount, source, created_at FROM payments ORDER BY id DESC LIMIT 5;\" 2>/dev/null || docker ps --format \"{{.Names}}\" | grep finance\n[sudo] password for Adm1n: \nSorry, try again.\n[sudo] password for Adm1n: \n id | date | recipient | amount | source | created_at \n----+---------------------+-----------------------------------------+--------+--------+-------------------------\n 8 | 2026-05-08 00:00:00 | POL BALICE Lagardere Travel R KR3 | 5.49 | UPLOAD | 2026-05-09 08:26:53.656\n 7 | 2026-05-08 00:00:00 | BGR SOFIA CBA EKO MARKET | 5.51 | UPLOAD | 2026-05-09 08:26:53.642\n 6 | 2026-05-08 00:00:00 | BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | 67.81 | UPLOAD | 2026-05-09 08:26:53.624\n 5 | 2026-05-08 00:00:00 | | 9.04 | UPLOAD | 2026-05-09 08:26:53.599\n 4 | 2026-05-08 00:00:00 | | 15.46 | UPLOAD | 2026-05-09 08:26:53.59\n(5 rows)\n\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend && sudo docker compose up -d backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 3.2s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.0s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 2.8s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 937B 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => CACHED [backend 8/8] COPY src ./src 0.0s\n => [backend] exporting to image 0.0s\n => => exporting layers 0.0s\n => => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Running 0.0s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \\\n \"DELETE FROM payments WHERE source = 'UPLOAD';\"\nDELETE 6\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$","depth":4,"on_screen":true,"value":"Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker compose logs backend --tail=60\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \nbackend-1 | 172.16.14.5 - - [09/May/2026:06:59:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:04:44 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:09:33 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | Prisma schema loaded from prisma/schema.prisma\nbackend-1 | Datasource \"db\": PostgreSQL database \"finance_hub\", schema \"public\" at \"db:5432\"\nbackend-1 | \nbackend-1 | 1 migration found in prisma/migrations\nbackend-1 | \nbackend-1 | \nbackend-1 | No pending migrations to apply.\nbackend-1 | ┌─────────────────────────────────────────────────────────┐\nbackend-1 | │ Update available 5.22.0 -> 7.8.0 │\nbackend-1 | │ │\nbackend-1 | │ This is a major update - please follow the guide at │\nbackend-1 | │ https://pris.ly/d/major-version-upgrade │\nbackend-1 | │ │\nbackend-1 | │ Run the following to update │\nbackend-1 | │ npm i --save-dev prisma@latest │\nbackend-1 | │ npm i @prisma/client@latest │\nbackend-1 | └─────────────────────────────────────────────────────────┘\nbackend-1 | Finance Hub API running on port 3001\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:19 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:27 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 273 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:30 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:21:03 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose up -d --build backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.9s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 1.0s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.0s\n => => transferring context: 13.11kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:13a2f7dcf0adc691967e5364f8757ef382320b21006b1ac7d24adc1799c685a3 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Started 10.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend frontend && sudo docker compose up -d\n[sudo] password for Adm1n: \nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 3.3s (21/21) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [frontend internal] load metadata for docker.io/library/node:20-alpine 1.5s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 25.13kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:02d3fe405f031f93190cd6a129dd2b46cd9f7fa8024d10b9b28cde38ab699494 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\n => [frontend internal] load build definition from Dockerfile 0.0s\n => => transferring dockerfile: 204B 0.0s\n => [frontend internal] load .dockerignore 0.1s\n => => transferring context: 2B 0.0s\n => [frontend internal] load build context 0.1s\n => => transferring context: 15.38kB 0.0s\n => CACHED [frontend 2/5] WORKDIR /app 0.0s\n => CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [frontend 4/5] RUN npm install 0.0s\n => [frontend 5/5] COPY . . 0.2s\n => [frontend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:7d1a56407bd7715bdcba452a02c8677926f7117c843d2e44ddd9f6317accb228 0.0s\n => => naming to docker.io/library/finance-hub-frontend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 4/4\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-adminer-1 Running 0.0s \n ✔ Container finance-hub-backend-1 Started 10.5s \n ✔ Container finance-hub-frontend-1 Started 0.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend && sudo docker compose up -d backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.6s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 0.8s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 25.55kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Started 10.5s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build frontend && sudo docker compose up -d frontend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.9s (10/10) FINISHED docker:default\n => [frontend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 204B 0.0s\n => [frontend internal] load metadata for docker.io/library/node:20-alpine 1.1s\n => [frontend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [frontend internal] load build context 0.1s\n => => transferring context: 48.01kB 0.0s\n => CACHED [frontend 2/5] WORKDIR /app 0.0s\n => CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [frontend 4/5] RUN npm install 0.0s\n => [frontend 5/5] COPY . . 0.2s\n => [frontend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:c45ced4de6924d6e7d9c567ae6242ce5fab8944c0cd2e8d627ef614e1ca71640 0.0s\n => => naming to docker.io/library/finance-hub-frontend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 3/3\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Running 0.0s \n ✔ Container finance-hub-frontend-1 Started 0.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \"SELECT id, date, recipient, amount, source, created_at FROM payments ORDER BY id DESC LIMIT 5;\" 2>/dev/null || docker ps --format \"{{.Names}}\" | grep finance\n[sudo] password for Adm1n: \nSorry, try again.\n[sudo] password for Adm1n: \n id | date | recipient | amount | source | created_at \n----+---------------------+-----------------------------------------+--------+--------+-------------------------\n 8 | 2026-05-08 00:00:00 | POL BALICE Lagardere Travel R KR3 | 5.49 | UPLOAD | 2026-05-09 08:26:53.656\n 7 | 2026-05-08 00:00:00 | BGR SOFIA CBA EKO MARKET | 5.51 | UPLOAD | 2026-05-09 08:26:53.642\n 6 | 2026-05-08 00:00:00 | BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | 67.81 | UPLOAD | 2026-05-09 08:26:53.624\n 5 | 2026-05-08 00:00:00 | | 9.04 | UPLOAD | 2026-05-09 08:26:53.599\n 4 | 2026-05-08 00:00:00 | | 15.46 | UPLOAD | 2026-05-09 08:26:53.59\n(5 rows)\n\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend && sudo docker compose up -d backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 3.2s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.0s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 2.8s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 937B 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => CACHED [backend 8/8] COPY src ./src 0.0s\n => [backend] exporting to image 0.0s\n => => exporting layers 0.0s\n => => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Running 0.0s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \\\n \"DELETE FROM payments WHERE source = 'UPLOAD';\"\nDELETE 6\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ssh","depth":1,"bounds":{"left":0.49027777,"top":0.033333335,"width":0.01875,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
8658093994537445629
|
-2932779149895021399
|
visual_change
|
accessibility
|
NULL
|
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/fin Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker compose logs backend --tail=60
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
backend-1 | [IP_ADDRESS] - - [09/May/2026:06:59:49 +0000] "GET /api/payments/meta/filters HTTP/1.1" 304 - "[URL_WITH_CREDENTIALS] │
backend-1 | │ npm i @prisma/client@latest │
backend-1 | └─────────────────────────────────────────────────────────┘
backend-1 | Finance Hub API running on port 3001
backend-1 | [IP_ADDRESS] - - [09/May/2026:08:15:05 +0000] "GET /api/payments/meta/filters HTTP/1.1" 304 - "[URL_WITH_CREDENTIALS] cd /volume2/docker/finance/finance-hub
sudo docker compose up -d --build backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.9s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 1.0s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.0s
=> => transferring context: 13.11kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:13a2f7dcf0adc691967e5364f8757ef382320b21006b1ac7d24adc1799c685a3 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Started 10.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend frontend && sudo docker compose up -d
[sudo] password for Adm1n:
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 3.3s (21/21) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [frontend internal] load metadata for docker.io/library/node:20-alpine 1.5s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 25.13kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:02d3fe405f031f93190cd6a129dd2b46cd9f7fa8024d10b9b28cde38ab699494 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
=> [frontend internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 204B 0.0s
=> [frontend internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [frontend internal] load build context 0.1s
=> => transferring context: 15.38kB 0.0s
=> CACHED [frontend 2/5] WORKDIR /app 0.0s
=> CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [frontend 4/5] RUN npm install 0.0s
=> [frontend 5/5] COPY . . 0.2s
=> [frontend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:7d1a56407bd7715bdcba452a02c8677926f7117c843d2e44ddd9f6317accb228 0.0s
=> => naming to docker.io/library/finance-hub-frontend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 4/4
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-adminer-1 Running 0.0s
✔ Container finance-hub-backend-1 Started 10.5s
✔ Container finance-hub-frontend-1 Started 0.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend && sudo docker compose up -d backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.6s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 0.8s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 25.55kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Started 10.5s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build frontend && sudo docker compose up -d frontend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.9s (10/10) FINISHED docker:default
=> [frontend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 204B 0.0s
=> [frontend internal] load metadata for docker.io/library/node:20-alpine 1.1s
=> [frontend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [frontend internal] load build context 0.1s
=> => transferring context: 48.01kB 0.0s
=> CACHED [frontend 2/5] WORKDIR /app 0.0s
=> CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [frontend 4/5] RUN npm install 0.0s
=> [frontend 5/5] COPY . . 0.2s
=> [frontend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:c45ced4de6924d6e7d9c567ae6242ce5fab8944c0cd2e8d627ef614e1ca71640 0.0s
=> => naming to docker.io/library/finance-hub-frontend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 3/3
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Running 0.0s
✔ Container finance-hub-frontend-1 Started 0.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c "SELECT id, date, recipient, amount, source, created_at FROM payments ORDER BY id DESC LIMIT 5;" 2>/dev/null || docker ps --format "{{.Names}}" | grep finance
[sudo] password for Adm1n:
Sorry, try again.
[sudo] password for Adm1n:
id | date | recipient | amount | source | created_at
----+---------------------+-----------------------------------------+--------+--------+-------------------------
8 | 2026-05-08 00:00:00 | POL BALICE Lagardere Travel R KR3 | 5.49 | UPLOAD | 2026-05-09 08:26:53.656
7 | 2026-05-08 00:00:00 | BGR SOFIA CBA EKO MARKET | 5.51 | UPLOAD | 2026-05-09 08:26:53.642
6 | 2026-05-08 00:00:00 | BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | 67.81 | UPLOAD | 2026-05-09 08:26:53.624
5 | 2026-05-08 00:00:00 | | 9.04 | UPLOAD | 2026-05-09 08:26:53.599
4 | 2026-05-08 00:00:00 | | 15.46 | UPLOAD | 2026-05-09 08:26:53.59
(5 rows)
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend && sudo docker compose up -d backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 3.2s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 2.8s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 937B 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> CACHED [backend 8/8] COPY src ./src 0.0s
=> [backend] exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Running 0.0s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \
"DELETE FROM payments WHERE source = 'UPLOAD';"
DELETE 6
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
ssh
Close Tab
⌥⌘1
ssh...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
12928
|
573
|
7
|
2026-05-09T09:57:12.641022+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778320632641_m1.jpg...
|
iTerm2
|
ssh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/fin Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker compose logs backend --tail=60
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
backend-1 | [IP_ADDRESS] - - [09/May/2026:06:59:49 +0000] "GET /api/payments/meta/filters HTTP/1.1" 304 - "[URL_WITH_CREDENTIALS] │
backend-1 | │ npm i @prisma/client@latest │
backend-1 | └─────────────────────────────────────────────────────────┘
backend-1 | Finance Hub API running on port 3001
backend-1 | [IP_ADDRESS] - - [09/May/2026:08:15:05 +0000] "GET /api/payments/meta/filters HTTP/1.1" 304 - "[URL_WITH_CREDENTIALS] cd /volume2/docker/finance/finance-hub
sudo docker compose up -d --build backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.9s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 1.0s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.0s
=> => transferring context: 13.11kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:13a2f7dcf0adc691967e5364f8757ef382320b21006b1ac7d24adc1799c685a3 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Started 10.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend frontend && sudo docker compose up -d
[sudo] password for Adm1n:
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 3.3s (21/21) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [frontend internal] load metadata for docker.io/library/node:20-alpine 1.5s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 25.13kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:02d3fe405f031f93190cd6a129dd2b46cd9f7fa8024d10b9b28cde38ab699494 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
=> [frontend internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 204B 0.0s
=> [frontend internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [frontend internal] load build context 0.1s
=> => transferring context: 15.38kB 0.0s
=> CACHED [frontend 2/5] WORKDIR /app 0.0s
=> CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [frontend 4/5] RUN npm install 0.0s
=> [frontend 5/5] COPY . . 0.2s
=> [frontend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:7d1a56407bd7715bdcba452a02c8677926f7117c843d2e44ddd9f6317accb228 0.0s
=> => naming to docker.io/library/finance-hub-frontend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 4/4
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-adminer-1 Running 0.0s
✔ Container finance-hub-backend-1 Started 10.5s
✔ Container finance-hub-frontend-1 Started 0.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend && sudo docker compose up -d backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.6s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 0.8s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 25.55kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Started 10.5s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build frontend && sudo docker compose up -d frontend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.9s (10/10) FINISHED docker:default
=> [frontend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 204B 0.0s
=> [frontend internal] load metadata for docker.io/library/node:20-alpine 1.1s
=> [frontend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [frontend internal] load build context 0.1s
=> => transferring context: 48.01kB 0.0s
=> CACHED [frontend 2/5] WORKDIR /app 0.0s
=> CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [frontend 4/5] RUN npm install 0.0s
=> [frontend 5/5] COPY . . 0.2s
=> [frontend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:c45ced4de6924d6e7d9c567ae6242ce5fab8944c0cd2e8d627ef614e1ca71640 0.0s
=> => naming to docker.io/library/finance-hub-frontend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 3/3
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Running 0.0s
✔ Container finance-hub-frontend-1 Started 0.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c "SELECT id, date, recipient, amount, source, created_at FROM payments ORDER BY id DESC LIMIT 5;" 2>/dev/null || docker ps --format "{{.Names}}" | grep finance
[sudo] password for Adm1n:
Sorry, try again.
[sudo] password for Adm1n:
id | date | recipient | amount | source | created_at
----+---------------------+-----------------------------------------+--------+--------+-------------------------
8 | 2026-05-08 00:00:00 | POL BALICE Lagardere Travel R KR3 | 5.49 | UPLOAD | 2026-05-09 08:26:53.656
7 | 2026-05-08 00:00:00 | BGR SOFIA CBA EKO MARKET | 5.51 | UPLOAD | 2026-05-09 08:26:53.642
6 | 2026-05-08 00:00:00 | BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | 67.81 | UPLOAD | 2026-05-09 08:26:53.624
5 | 2026-05-08 00:00:00 | | 9.04 | UPLOAD | 2026-05-09 08:26:53.599
4 | 2026-05-08 00:00:00 | | 15.46 | UPLOAD | 2026-05-09 08:26:53.59
(5 rows)
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend && sudo docker compose up -d backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 3.2s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 2.8s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 937B 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> CACHED [backend 8/8] COPY src ./src 0.0s
=> [backend] exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Running 0.0s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \
"DELETE FROM payments WHERE source = 'UPLOAD';"
DELETE 6
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
ssh
Close Tab
⌥⌘1
ssh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker compose logs backend --tail=60\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \nbackend-1 | 172.16.14.5 - - [09/May/2026:06:59:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:04:44 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:09:33 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | Prisma schema loaded from prisma/schema.prisma\nbackend-1 | Datasource \"db\": PostgreSQL database \"finance_hub\", schema \"public\" at \"db:5432\"\nbackend-1 | \nbackend-1 | 1 migration found in prisma/migrations\nbackend-1 | \nbackend-1 | \nbackend-1 | No pending migrations to apply.\nbackend-1 | ┌─────────────────────────────────────────────────────────┐\nbackend-1 | │ Update available 5.22.0 -> 7.8.0 │\nbackend-1 | │ │\nbackend-1 | │ This is a major update - please follow the guide at │\nbackend-1 | │ https://pris.ly/d/major-version-upgrade │\nbackend-1 | │ │\nbackend-1 | │ Run the following to update │\nbackend-1 | │ npm i --save-dev prisma@latest │\nbackend-1 | │ npm i @prisma/client@latest │\nbackend-1 | └─────────────────────────────────────────────────────────┘\nbackend-1 | Finance Hub API running on port 3001\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:19 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:27 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 273 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:30 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:21:03 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose up -d --build backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.9s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 1.0s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.0s\n => => transferring context: 13.11kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:13a2f7dcf0adc691967e5364f8757ef382320b21006b1ac7d24adc1799c685a3 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Started 10.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend frontend && sudo docker compose up -d\n[sudo] password for Adm1n: \nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 3.3s (21/21) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [frontend internal] load metadata for docker.io/library/node:20-alpine 1.5s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 25.13kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:02d3fe405f031f93190cd6a129dd2b46cd9f7fa8024d10b9b28cde38ab699494 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\n => [frontend internal] load build definition from Dockerfile 0.0s\n => => transferring dockerfile: 204B 0.0s\n => [frontend internal] load .dockerignore 0.1s\n => => transferring context: 2B 0.0s\n => [frontend internal] load build context 0.1s\n => => transferring context: 15.38kB 0.0s\n => CACHED [frontend 2/5] WORKDIR /app 0.0s\n => CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [frontend 4/5] RUN npm install 0.0s\n => [frontend 5/5] COPY . . 0.2s\n => [frontend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:7d1a56407bd7715bdcba452a02c8677926f7117c843d2e44ddd9f6317accb228 0.0s\n => => naming to docker.io/library/finance-hub-frontend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 4/4\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-adminer-1 Running 0.0s \n ✔ Container finance-hub-backend-1 Started 10.5s \n ✔ Container finance-hub-frontend-1 Started 0.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend && sudo docker compose up -d backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.6s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 0.8s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 25.55kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Started 10.5s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build frontend && sudo docker compose up -d frontend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.9s (10/10) FINISHED docker:default\n => [frontend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 204B 0.0s\n => [frontend internal] load metadata for docker.io/library/node:20-alpine 1.1s\n => [frontend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [frontend internal] load build context 0.1s\n => => transferring context: 48.01kB 0.0s\n => CACHED [frontend 2/5] WORKDIR /app 0.0s\n => CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [frontend 4/5] RUN npm install 0.0s\n => [frontend 5/5] COPY . . 0.2s\n => [frontend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:c45ced4de6924d6e7d9c567ae6242ce5fab8944c0cd2e8d627ef614e1ca71640 0.0s\n => => naming to docker.io/library/finance-hub-frontend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 3/3\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Running 0.0s \n ✔ Container finance-hub-frontend-1 Started 0.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \"SELECT id, date, recipient, amount, source, created_at FROM payments ORDER BY id DESC LIMIT 5;\" 2>/dev/null || docker ps --format \"{{.Names}}\" | grep finance\n[sudo] password for Adm1n: \nSorry, try again.\n[sudo] password for Adm1n: \n id | date | recipient | amount | source | created_at \n----+---------------------+-----------------------------------------+--------+--------+-------------------------\n 8 | 2026-05-08 00:00:00 | POL BALICE Lagardere Travel R KR3 | 5.49 | UPLOAD | 2026-05-09 08:26:53.656\n 7 | 2026-05-08 00:00:00 | BGR SOFIA CBA EKO MARKET | 5.51 | UPLOAD | 2026-05-09 08:26:53.642\n 6 | 2026-05-08 00:00:00 | BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | 67.81 | UPLOAD | 2026-05-09 08:26:53.624\n 5 | 2026-05-08 00:00:00 | | 9.04 | UPLOAD | 2026-05-09 08:26:53.599\n 4 | 2026-05-08 00:00:00 | | 15.46 | UPLOAD | 2026-05-09 08:26:53.59\n(5 rows)\n\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend && sudo docker compose up -d backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 3.2s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.0s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 2.8s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 937B 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => CACHED [backend 8/8] COPY src ./src 0.0s\n => [backend] exporting to image 0.0s\n => => exporting layers 0.0s\n => => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Running 0.0s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \\\n \"DELETE FROM payments WHERE source = 'UPLOAD';\"\nDELETE 6\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$","depth":4,"on_screen":true,"value":"Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker compose logs backend --tail=60\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \nbackend-1 | 172.16.14.5 - - [09/May/2026:06:59:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:04:44 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:09:33 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | Prisma schema loaded from prisma/schema.prisma\nbackend-1 | Datasource \"db\": PostgreSQL database \"finance_hub\", schema \"public\" at \"db:5432\"\nbackend-1 | \nbackend-1 | 1 migration found in prisma/migrations\nbackend-1 | \nbackend-1 | \nbackend-1 | No pending migrations to apply.\nbackend-1 | ┌─────────────────────────────────────────────────────────┐\nbackend-1 | │ Update available 5.22.0 -> 7.8.0 │\nbackend-1 | │ │\nbackend-1 | │ This is a major update - please follow the guide at │\nbackend-1 | │ https://pris.ly/d/major-version-upgrade │\nbackend-1 | │ │\nbackend-1 | │ Run the following to update │\nbackend-1 | │ npm i --save-dev prisma@latest │\nbackend-1 | │ npm i @prisma/client@latest │\nbackend-1 | └─────────────────────────────────────────────────────────┘\nbackend-1 | Finance Hub API running on port 3001\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:19 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:27 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 273 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:30 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:21:03 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose up -d --build backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.9s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 1.0s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.0s\n => => transferring context: 13.11kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:13a2f7dcf0adc691967e5364f8757ef382320b21006b1ac7d24adc1799c685a3 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Started 10.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend frontend && sudo docker compose up -d\n[sudo] password for Adm1n: \nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 3.3s (21/21) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [frontend internal] load metadata for docker.io/library/node:20-alpine 1.5s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 25.13kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:02d3fe405f031f93190cd6a129dd2b46cd9f7fa8024d10b9b28cde38ab699494 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\n => [frontend internal] load build definition from Dockerfile 0.0s\n => => transferring dockerfile: 204B 0.0s\n => [frontend internal] load .dockerignore 0.1s\n => => transferring context: 2B 0.0s\n => [frontend internal] load build context 0.1s\n => => transferring context: 15.38kB 0.0s\n => CACHED [frontend 2/5] WORKDIR /app 0.0s\n => CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [frontend 4/5] RUN npm install 0.0s\n => [frontend 5/5] COPY . . 0.2s\n => [frontend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:7d1a56407bd7715bdcba452a02c8677926f7117c843d2e44ddd9f6317accb228 0.0s\n => => naming to docker.io/library/finance-hub-frontend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 4/4\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-adminer-1 Running 0.0s \n ✔ Container finance-hub-backend-1 Started 10.5s \n ✔ Container finance-hub-frontend-1 Started 0.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend && sudo docker compose up -d backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.6s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 0.8s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 25.55kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Started 10.5s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build frontend && sudo docker compose up -d frontend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.9s (10/10) FINISHED docker:default\n => [frontend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 204B 0.0s\n => [frontend internal] load metadata for docker.io/library/node:20-alpine 1.1s\n => [frontend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [frontend internal] load build context 0.1s\n => => transferring context: 48.01kB 0.0s\n => CACHED [frontend 2/5] WORKDIR /app 0.0s\n => CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [frontend 4/5] RUN npm install 0.0s\n => [frontend 5/5] COPY . . 0.2s\n => [frontend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:c45ced4de6924d6e7d9c567ae6242ce5fab8944c0cd2e8d627ef614e1ca71640 0.0s\n => => naming to docker.io/library/finance-hub-frontend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 3/3\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Running 0.0s \n ✔ Container finance-hub-frontend-1 Started 0.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \"SELECT id, date, recipient, amount, source, created_at FROM payments ORDER BY id DESC LIMIT 5;\" 2>/dev/null || docker ps --format \"{{.Names}}\" | grep finance\n[sudo] password for Adm1n: \nSorry, try again.\n[sudo] password for Adm1n: \n id | date | recipient | amount | source | created_at \n----+---------------------+-----------------------------------------+--------+--------+-------------------------\n 8 | 2026-05-08 00:00:00 | POL BALICE Lagardere Travel R KR3 | 5.49 | UPLOAD | 2026-05-09 08:26:53.656\n 7 | 2026-05-08 00:00:00 | BGR SOFIA CBA EKO MARKET | 5.51 | UPLOAD | 2026-05-09 08:26:53.642\n 6 | 2026-05-08 00:00:00 | BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | 67.81 | UPLOAD | 2026-05-09 08:26:53.624\n 5 | 2026-05-08 00:00:00 | | 9.04 | UPLOAD | 2026-05-09 08:26:53.599\n 4 | 2026-05-08 00:00:00 | | 15.46 | UPLOAD | 2026-05-09 08:26:53.59\n(5 rows)\n\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend && sudo docker compose up -d backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 3.2s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.0s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 2.8s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 937B 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => CACHED [backend 8/8] COPY src ./src 0.0s\n => [backend] exporting to image 0.0s\n => => exporting layers 0.0s\n => => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Running 0.0s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \\\n \"DELETE FROM payments WHERE source = 'UPLOAD';\"\nDELETE 6\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ssh","depth":1,"bounds":{"left":0.49027777,"top":0.033333335,"width":0.01875,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
8658093994537445629
|
-2932779149895021399
|
click
|
accessibility
|
NULL
|
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/fin Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker compose logs backend --tail=60
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
backend-1 | [IP_ADDRESS] - - [09/May/2026:06:59:49 +0000] "GET /api/payments/meta/filters HTTP/1.1" 304 - "[URL_WITH_CREDENTIALS] │
backend-1 | │ npm i @prisma/client@latest │
backend-1 | └─────────────────────────────────────────────────────────┘
backend-1 | Finance Hub API running on port 3001
backend-1 | [IP_ADDRESS] - - [09/May/2026:08:15:05 +0000] "GET /api/payments/meta/filters HTTP/1.1" 304 - "[URL_WITH_CREDENTIALS] cd /volume2/docker/finance/finance-hub
sudo docker compose up -d --build backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.9s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 1.0s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.0s
=> => transferring context: 13.11kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:13a2f7dcf0adc691967e5364f8757ef382320b21006b1ac7d24adc1799c685a3 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Started 10.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend frontend && sudo docker compose up -d
[sudo] password for Adm1n:
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 3.3s (21/21) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [frontend internal] load metadata for docker.io/library/node:20-alpine 1.5s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 25.13kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:02d3fe405f031f93190cd6a129dd2b46cd9f7fa8024d10b9b28cde38ab699494 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
=> [frontend internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 204B 0.0s
=> [frontend internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [frontend internal] load build context 0.1s
=> => transferring context: 15.38kB 0.0s
=> CACHED [frontend 2/5] WORKDIR /app 0.0s
=> CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [frontend 4/5] RUN npm install 0.0s
=> [frontend 5/5] COPY . . 0.2s
=> [frontend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:7d1a56407bd7715bdcba452a02c8677926f7117c843d2e44ddd9f6317accb228 0.0s
=> => naming to docker.io/library/finance-hub-frontend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 4/4
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-adminer-1 Running 0.0s
✔ Container finance-hub-backend-1 Started 10.5s
✔ Container finance-hub-frontend-1 Started 0.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend && sudo docker compose up -d backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.6s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 0.8s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 25.55kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Started 10.5s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build frontend && sudo docker compose up -d frontend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.9s (10/10) FINISHED docker:default
=> [frontend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 204B 0.0s
=> [frontend internal] load metadata for docker.io/library/node:20-alpine 1.1s
=> [frontend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [frontend internal] load build context 0.1s
=> => transferring context: 48.01kB 0.0s
=> CACHED [frontend 2/5] WORKDIR /app 0.0s
=> CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [frontend 4/5] RUN npm install 0.0s
=> [frontend 5/5] COPY . . 0.2s
=> [frontend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:c45ced4de6924d6e7d9c567ae6242ce5fab8944c0cd2e8d627ef614e1ca71640 0.0s
=> => naming to docker.io/library/finance-hub-frontend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 3/3
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Running 0.0s
✔ Container finance-hub-frontend-1 Started 0.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c "SELECT id, date, recipient, amount, source, created_at FROM payments ORDER BY id DESC LIMIT 5;" 2>/dev/null || docker ps --format "{{.Names}}" | grep finance
[sudo] password for Adm1n:
Sorry, try again.
[sudo] password for Adm1n:
id | date | recipient | amount | source | created_at
----+---------------------+-----------------------------------------+--------+--------+-------------------------
8 | 2026-05-08 00:00:00 | POL BALICE Lagardere Travel R KR3 | 5.49 | UPLOAD | 2026-05-09 08:26:53.656
7 | 2026-05-08 00:00:00 | BGR SOFIA CBA EKO MARKET | 5.51 | UPLOAD | 2026-05-09 08:26:53.642
6 | 2026-05-08 00:00:00 | BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | 67.81 | UPLOAD | 2026-05-09 08:26:53.624
5 | 2026-05-08 00:00:00 | | 9.04 | UPLOAD | 2026-05-09 08:26:53.599
4 | 2026-05-08 00:00:00 | | 15.46 | UPLOAD | 2026-05-09 08:26:53.59
(5 rows)
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend && sudo docker compose up -d backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 3.2s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 2.8s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 937B 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> CACHED [backend 8/8] COPY src ./src 0.0s
=> [backend] exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Running 0.0s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \
"DELETE FROM payments WHERE source = 'UPLOAD';"
DELETE 6
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
ssh
Close Tab
⌥⌘1
ssh...
|
12917
|
NULL
|
NULL
|
NULL
|
|
12929
|
574
|
7
|
2026-05-09T09:57:13.431773+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778320633431_m2.jpg...
|
iTerm2
|
ssh
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/fin Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker compose logs backend --tail=60
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
backend-1 | [IP_ADDRESS] - - [09/May/2026:06:59:49 +0000] "GET /api/payments/meta/filters HTTP/1.1" 304 - "[URL_WITH_CREDENTIALS] │
backend-1 | │ npm i @prisma/client@latest │
backend-1 | └─────────────────────────────────────────────────────────┘
backend-1 | Finance Hub API running on port 3001
backend-1 | [IP_ADDRESS] - - [09/May/2026:08:15:05 +0000] "GET /api/payments/meta/filters HTTP/1.1" 304 - "[URL_WITH_CREDENTIALS] cd /volume2/docker/finance/finance-hub
sudo docker compose up -d --build backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.9s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 1.0s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.0s
=> => transferring context: 13.11kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:13a2f7dcf0adc691967e5364f8757ef382320b21006b1ac7d24adc1799c685a3 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Started 10.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend frontend && sudo docker compose up -d
[sudo] password for Adm1n:
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 3.3s (21/21) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [frontend internal] load metadata for docker.io/library/node:20-alpine 1.5s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 25.13kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:02d3fe405f031f93190cd6a129dd2b46cd9f7fa8024d10b9b28cde38ab699494 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
=> [frontend internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 204B 0.0s
=> [frontend internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [frontend internal] load build context 0.1s
=> => transferring context: 15.38kB 0.0s
=> CACHED [frontend 2/5] WORKDIR /app 0.0s
=> CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [frontend 4/5] RUN npm install 0.0s
=> [frontend 5/5] COPY . . 0.2s
=> [frontend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:7d1a56407bd7715bdcba452a02c8677926f7117c843d2e44ddd9f6317accb228 0.0s
=> => naming to docker.io/library/finance-hub-frontend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 4/4
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-adminer-1 Running 0.0s
✔ Container finance-hub-backend-1 Started 10.5s
✔ Container finance-hub-frontend-1 Started 0.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend && sudo docker compose up -d backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.6s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 0.8s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 25.55kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Started 10.5s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build frontend && sudo docker compose up -d frontend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.9s (10/10) FINISHED docker:default
=> [frontend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 204B 0.0s
=> [frontend internal] load metadata for docker.io/library/node:20-alpine 1.1s
=> [frontend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [frontend internal] load build context 0.1s
=> => transferring context: 48.01kB 0.0s
=> CACHED [frontend 2/5] WORKDIR /app 0.0s
=> CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [frontend 4/5] RUN npm install 0.0s
=> [frontend 5/5] COPY . . 0.2s
=> [frontend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:c45ced4de6924d6e7d9c567ae6242ce5fab8944c0cd2e8d627ef614e1ca71640 0.0s
=> => naming to docker.io/library/finance-hub-frontend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 3/3
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Running 0.0s
✔ Container finance-hub-frontend-1 Started 0.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c "SELECT id, date, recipient, amount, source, created_at FROM payments ORDER BY id DESC LIMIT 5;" 2>/dev/null || docker ps --format "{{.Names}}" | grep finance
[sudo] password for Adm1n:
Sorry, try again.
[sudo] password for Adm1n:
id | date | recipient | amount | source | created_at
----+---------------------+-----------------------------------------+--------+--------+-------------------------
8 | 2026-05-08 00:00:00 | POL BALICE Lagardere Travel R KR3 | 5.49 | UPLOAD | 2026-05-09 08:26:53.656
7 | 2026-05-08 00:00:00 | BGR SOFIA CBA EKO MARKET | 5.51 | UPLOAD | 2026-05-09 08:26:53.642
6 | 2026-05-08 00:00:00 | BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | 67.81 | UPLOAD | 2026-05-09 08:26:53.624
5 | 2026-05-08 00:00:00 | | 9.04 | UPLOAD | 2026-05-09 08:26:53.599
4 | 2026-05-08 00:00:00 | | 15.46 | UPLOAD | 2026-05-09 08:26:53.59
(5 rows)
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend && sudo docker compose up -d backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 3.2s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 2.8s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 937B 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> CACHED [backend 8/8] COPY src ./src 0.0s
=> [backend] exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Running 0.0s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \
"DELETE FROM payments WHERE source = 'UPLOAD';"
DELETE 6
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
ssh
Close Tab
⌥⌘1
ssh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker compose logs backend --tail=60\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \nbackend-1 | 172.16.14.5 - - [09/May/2026:06:59:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:04:44 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:09:33 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | Prisma schema loaded from prisma/schema.prisma\nbackend-1 | Datasource \"db\": PostgreSQL database \"finance_hub\", schema \"public\" at \"db:5432\"\nbackend-1 | \nbackend-1 | 1 migration found in prisma/migrations\nbackend-1 | \nbackend-1 | \nbackend-1 | No pending migrations to apply.\nbackend-1 | ┌─────────────────────────────────────────────────────────┐\nbackend-1 | │ Update available 5.22.0 -> 7.8.0 │\nbackend-1 | │ │\nbackend-1 | │ This is a major update - please follow the guide at │\nbackend-1 | │ https://pris.ly/d/major-version-upgrade │\nbackend-1 | │ │\nbackend-1 | │ Run the following to update │\nbackend-1 | │ npm i --save-dev prisma@latest │\nbackend-1 | │ npm i @prisma/client@latest │\nbackend-1 | └─────────────────────────────────────────────────────────┘\nbackend-1 | Finance Hub API running on port 3001\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:19 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:27 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 273 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:30 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:21:03 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose up -d --build backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.9s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 1.0s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.0s\n => => transferring context: 13.11kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:13a2f7dcf0adc691967e5364f8757ef382320b21006b1ac7d24adc1799c685a3 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Started 10.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend frontend && sudo docker compose up -d\n[sudo] password for Adm1n: \nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 3.3s (21/21) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [frontend internal] load metadata for docker.io/library/node:20-alpine 1.5s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 25.13kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:02d3fe405f031f93190cd6a129dd2b46cd9f7fa8024d10b9b28cde38ab699494 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\n => [frontend internal] load build definition from Dockerfile 0.0s\n => => transferring dockerfile: 204B 0.0s\n => [frontend internal] load .dockerignore 0.1s\n => => transferring context: 2B 0.0s\n => [frontend internal] load build context 0.1s\n => => transferring context: 15.38kB 0.0s\n => CACHED [frontend 2/5] WORKDIR /app 0.0s\n => CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [frontend 4/5] RUN npm install 0.0s\n => [frontend 5/5] COPY . . 0.2s\n => [frontend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:7d1a56407bd7715bdcba452a02c8677926f7117c843d2e44ddd9f6317accb228 0.0s\n => => naming to docker.io/library/finance-hub-frontend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 4/4\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-adminer-1 Running 0.0s \n ✔ Container finance-hub-backend-1 Started 10.5s \n ✔ Container finance-hub-frontend-1 Started 0.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend && sudo docker compose up -d backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.6s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 0.8s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 25.55kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Started 10.5s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build frontend && sudo docker compose up -d frontend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.9s (10/10) FINISHED docker:default\n => [frontend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 204B 0.0s\n => [frontend internal] load metadata for docker.io/library/node:20-alpine 1.1s\n => [frontend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [frontend internal] load build context 0.1s\n => => transferring context: 48.01kB 0.0s\n => CACHED [frontend 2/5] WORKDIR /app 0.0s\n => CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [frontend 4/5] RUN npm install 0.0s\n => [frontend 5/5] COPY . . 0.2s\n => [frontend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:c45ced4de6924d6e7d9c567ae6242ce5fab8944c0cd2e8d627ef614e1ca71640 0.0s\n => => naming to docker.io/library/finance-hub-frontend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 3/3\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Running 0.0s \n ✔ Container finance-hub-frontend-1 Started 0.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \"SELECT id, date, recipient, amount, source, created_at FROM payments ORDER BY id DESC LIMIT 5;\" 2>/dev/null || docker ps --format \"{{.Names}}\" | grep finance\n[sudo] password for Adm1n: \nSorry, try again.\n[sudo] password for Adm1n: \n id | date | recipient | amount | source | created_at \n----+---------------------+-----------------------------------------+--------+--------+-------------------------\n 8 | 2026-05-08 00:00:00 | POL BALICE Lagardere Travel R KR3 | 5.49 | UPLOAD | 2026-05-09 08:26:53.656\n 7 | 2026-05-08 00:00:00 | BGR SOFIA CBA EKO MARKET | 5.51 | UPLOAD | 2026-05-09 08:26:53.642\n 6 | 2026-05-08 00:00:00 | BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | 67.81 | UPLOAD | 2026-05-09 08:26:53.624\n 5 | 2026-05-08 00:00:00 | | 9.04 | UPLOAD | 2026-05-09 08:26:53.599\n 4 | 2026-05-08 00:00:00 | | 15.46 | UPLOAD | 2026-05-09 08:26:53.59\n(5 rows)\n\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend && sudo docker compose up -d backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 3.2s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.0s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 2.8s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 937B 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => CACHED [backend 8/8] COPY src ./src 0.0s\n => [backend] exporting to image 0.0s\n => => exporting layers 0.0s\n => => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Running 0.0s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \\\n \"DELETE FROM payments WHERE source = 'UPLOAD';\"\nDELETE 6\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$","depth":4,"on_screen":true,"value":"Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker compose logs backend --tail=60\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \nbackend-1 | 172.16.14.5 - - [09/May/2026:06:59:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:00:02 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:04:44 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:14:15 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:28:58 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:38:04 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 200 1187 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:07:41:49 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 200 125 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/138.0.7204.23 Safari/537.36\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:08 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:08:22 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"http://192.168.0.242:5175/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:09:33 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | Prisma schema loaded from prisma/schema.prisma\nbackend-1 | Datasource \"db\": PostgreSQL database \"finance_hub\", schema \"public\" at \"db:5432\"\nbackend-1 | \nbackend-1 | 1 migration found in prisma/migrations\nbackend-1 | \nbackend-1 | \nbackend-1 | No pending migrations to apply.\nbackend-1 | ┌─────────────────────────────────────────────────────────┐\nbackend-1 | │ Update available 5.22.0 -> 7.8.0 │\nbackend-1 | │ │\nbackend-1 | │ This is a major update - please follow the guide at │\nbackend-1 | │ https://pris.ly/d/major-version-upgrade │\nbackend-1 | │ │\nbackend-1 | │ Run the following to update │\nbackend-1 | │ npm i --save-dev prisma@latest │\nbackend-1 | │ npm i @prisma/client@latest │\nbackend-1 | └─────────────────────────────────────────────────────────┘\nbackend-1 | Finance Hub API running on port 3001\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments/meta/filters HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:05 +0000] \"GET /api/payments?page=1&limit=50&sortBy=createdAt&sortDir=desc HTTP/1.1\" 304 - \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:19 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:27 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 273 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:15:30 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nbackend-1 | 172.16.14.5 - - [09/May/2026:08:21:03 +0000] \"POST /api/upload/csv HTTP/1.1\" 422 166 \"https://finance-hub.lakylak.xyz/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0\"\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose up -d --build backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.9s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 1.0s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.0s\n => => transferring context: 13.11kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:13a2f7dcf0adc691967e5364f8757ef382320b21006b1ac7d24adc1799c685a3 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Started 10.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend frontend && sudo docker compose up -d\n[sudo] password for Adm1n: \nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 3.3s (21/21) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [frontend internal] load metadata for docker.io/library/node:20-alpine 1.5s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 25.13kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:02d3fe405f031f93190cd6a129dd2b46cd9f7fa8024d10b9b28cde38ab699494 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\n => [frontend internal] load build definition from Dockerfile 0.0s\n => => transferring dockerfile: 204B 0.0s\n => [frontend internal] load .dockerignore 0.1s\n => => transferring context: 2B 0.0s\n => [frontend internal] load build context 0.1s\n => => transferring context: 15.38kB 0.0s\n => CACHED [frontend 2/5] WORKDIR /app 0.0s\n => CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [frontend 4/5] RUN npm install 0.0s\n => [frontend 5/5] COPY . . 0.2s\n => [frontend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:7d1a56407bd7715bdcba452a02c8677926f7117c843d2e44ddd9f6317accb228 0.0s\n => => naming to docker.io/library/finance-hub-frontend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 4/4\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-adminer-1 Running 0.0s \n ✔ Container finance-hub-backend-1 Started 10.5s \n ✔ Container finance-hub-frontend-1 Started 0.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend && sudo docker compose up -d backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.6s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 0.8s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 25.55kB 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => [backend 8/8] COPY src ./src 0.2s\n => [backend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Started 10.5s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build frontend && sudo docker compose up -d frontend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 1.9s (10/10) FINISHED docker:default\n => [frontend internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 204B 0.0s\n => [frontend internal] load metadata for docker.io/library/node:20-alpine 1.1s\n => [frontend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [frontend internal] load build context 0.1s\n => => transferring context: 48.01kB 0.0s\n => CACHED [frontend 2/5] WORKDIR /app 0.0s\n => CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [frontend 4/5] RUN npm install 0.0s\n => [frontend 5/5] COPY . . 0.2s\n => [frontend] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:c45ced4de6924d6e7d9c567ae6242ce5fab8944c0cd2e8d627ef614e1ca71640 0.0s\n => => naming to docker.io/library/finance-hub-frontend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 3/3\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Running 0.0s \n ✔ Container finance-hub-frontend-1 Started 0.6s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \"SELECT id, date, recipient, amount, source, created_at FROM payments ORDER BY id DESC LIMIT 5;\" 2>/dev/null || docker ps --format \"{{.Names}}\" | grep finance\n[sudo] password for Adm1n: \nSorry, try again.\n[sudo] password for Adm1n: \n id | date | recipient | amount | source | created_at \n----+---------------------+-----------------------------------------+--------+--------+-------------------------\n 8 | 2026-05-08 00:00:00 | POL BALICE Lagardere Travel R KR3 | 5.49 | UPLOAD | 2026-05-09 08:26:53.656\n 7 | 2026-05-08 00:00:00 | BGR SOFIA CBA EKO MARKET | 5.51 | UPLOAD | 2026-05-09 08:26:53.642\n 6 | 2026-05-08 00:00:00 | BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | 67.81 | UPLOAD | 2026-05-09 08:26:53.624\n 5 | 2026-05-08 00:00:00 | | 9.04 | UPLOAD | 2026-05-09 08:26:53.599\n 4 | 2026-05-08 00:00:00 | | 15.46 | UPLOAD | 2026-05-09 08:26:53.59\n(5 rows)\n\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub\nsudo docker compose build backend && sudo docker compose up -d backend\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Building 3.2s (13/13) FINISHED docker:default\n => [backend internal] load build definition from Dockerfile 0.0s\n => => transferring dockerfile: 329B 0.0s\n => [backend internal] load metadata for docker.io/library/node:20-alpine 2.8s\n => [backend internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s\n => [backend internal] load build context 0.1s\n => => transferring context: 937B 0.0s\n => CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s\n => CACHED [backend 3/8] WORKDIR /app 0.0s\n => CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s\n => CACHED [backend 5/8] RUN npm install 0.0s\n => CACHED [backend 6/8] COPY prisma ./prisma 0.0s\n => CACHED [backend 7/8] RUN npx prisma generate 0.0s\n => CACHED [backend 8/8] COPY src ./src 0.0s\n => [backend] exporting to image 0.0s\n => => exporting layers 0.0s\n => => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s\n => => naming to docker.io/library/finance-hub-backend 0.0s\nWARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete \n[+] Running 2/2\n ✔ Container finance-hub-db-1 Healthy 0.0s \n ✔ Container finance-hub-backend-1 Running 0.0s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \\\n \"DELETE FROM payments WHERE source = 'UPLOAD';\"\nDELETE 6\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.06732048,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.27227393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.33759972,"top":1.0,"width":0.06732048,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33959442,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.40492022,"top":1.0,"width":0.06732048,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.4069149,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.4722407,"top":1.0,"width":0.06732048,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.4742354,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.53956115,"top":1.0,"width":0.06715426,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.5415558,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.60671544,"top":1.0,"width":0.06715426,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6087101,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.67386967,"top":1.0,"width":0.06715426,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.67586434,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ssh","depth":1,"bounds":{"left":0.5049867,"top":1.0,"width":0.008976064,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
8658093994537445629
|
-2932779149895021399
|
click
|
accessibility
|
NULL
|
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/fin Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker compose logs backend --tail=60
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
backend-1 | [IP_ADDRESS] - - [09/May/2026:06:59:49 +0000] "GET /api/payments/meta/filters HTTP/1.1" 304 - "[URL_WITH_CREDENTIALS] │
backend-1 | │ npm i @prisma/client@latest │
backend-1 | └─────────────────────────────────────────────────────────┘
backend-1 | Finance Hub API running on port 3001
backend-1 | [IP_ADDRESS] - - [09/May/2026:08:15:05 +0000] "GET /api/payments/meta/filters HTTP/1.1" 304 - "[URL_WITH_CREDENTIALS] cd /volume2/docker/finance/finance-hub
sudo docker compose up -d --build backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.9s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 1.0s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.0s
=> => transferring context: 13.11kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:13a2f7dcf0adc691967e5364f8757ef382320b21006b1ac7d24adc1799c685a3 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Started 10.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend frontend && sudo docker compose up -d
[sudo] password for Adm1n:
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 3.3s (21/21) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [frontend internal] load metadata for docker.io/library/node:20-alpine 1.5s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 25.13kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:02d3fe405f031f93190cd6a129dd2b46cd9f7fa8024d10b9b28cde38ab699494 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
=> [frontend internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 204B 0.0s
=> [frontend internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [frontend internal] load build context 0.1s
=> => transferring context: 15.38kB 0.0s
=> CACHED [frontend 2/5] WORKDIR /app 0.0s
=> CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [frontend 4/5] RUN npm install 0.0s
=> [frontend 5/5] COPY . . 0.2s
=> [frontend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:7d1a56407bd7715bdcba452a02c8677926f7117c843d2e44ddd9f6317accb228 0.0s
=> => naming to docker.io/library/finance-hub-frontend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 4/4
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-adminer-1 Running 0.0s
✔ Container finance-hub-backend-1 Started 10.5s
✔ Container finance-hub-frontend-1 Started 0.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend && sudo docker compose up -d backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.6s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 0.8s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 25.55kB 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> [backend 8/8] COPY src ./src 0.2s
=> [backend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Started 10.5s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build frontend && sudo docker compose up -d frontend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 1.9s (10/10) FINISHED docker:default
=> [frontend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 204B 0.0s
=> [frontend internal] load metadata for docker.io/library/node:20-alpine 1.1s
=> [frontend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [frontend 1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [frontend internal] load build context 0.1s
=> => transferring context: 48.01kB 0.0s
=> CACHED [frontend 2/5] WORKDIR /app 0.0s
=> CACHED [frontend 3/5] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [frontend 4/5] RUN npm install 0.0s
=> [frontend 5/5] COPY . . 0.2s
=> [frontend] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:c45ced4de6924d6e7d9c567ae6242ce5fab8944c0cd2e8d627ef614e1ca71640 0.0s
=> => naming to docker.io/library/finance-hub-frontend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 3/3
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Running 0.0s
✔ Container finance-hub-frontend-1 Started 0.6s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c "SELECT id, date, recipient, amount, source, created_at FROM payments ORDER BY id DESC LIMIT 5;" 2>/dev/null || docker ps --format "{{.Names}}" | grep finance
[sudo] password for Adm1n:
Sorry, try again.
[sudo] password for Adm1n:
id | date | recipient | amount | source | created_at
----+---------------------+-----------------------------------------+--------+--------+-------------------------
8 | 2026-05-08 00:00:00 | POL BALICE Lagardere Travel R KR3 | 5.49 | UPLOAD | 2026-05-09 08:26:53.656
7 | 2026-05-08 00:00:00 | BGR SOFIA CBA EKO MARKET | 5.51 | UPLOAD | 2026-05-09 08:26:53.642
6 | 2026-05-08 00:00:00 | BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR | 67.81 | UPLOAD | 2026-05-09 08:26:53.624
5 | 2026-05-08 00:00:00 | | 9.04 | UPLOAD | 2026-05-09 08:26:53.599
4 | 2026-05-08 00:00:00 | | 15.46 | UPLOAD | 2026-05-09 08:26:53.59
(5 rows)
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ cd /volume2/docker/finance/finance-hub
sudo docker compose build backend && sudo docker compose up -d backend
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Building 3.2s (13/13) FINISHED docker:default
=> [backend internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 329B 0.0s
=> [backend internal] load metadata for docker.io/library/node:20-alpine 2.8s
=> [backend internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [backend 1/8] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s
=> [backend internal] load build context 0.1s
=> => transferring context: 937B 0.0s
=> CACHED [backend 2/8] RUN apk add --no-cache openssl 0.0s
=> CACHED [backend 3/8] WORKDIR /app 0.0s
=> CACHED [backend 4/8] COPY package.json package-lock.json* ./ 0.0s
=> CACHED [backend 5/8] RUN npm install 0.0s
=> CACHED [backend 6/8] COPY prisma ./prisma 0.0s
=> CACHED [backend 7/8] RUN npx prisma generate 0.0s
=> CACHED [backend 8/8] COPY src ./src 0.0s
=> [backend] exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:7cb4d54b1215fd462e1b3ae3030647642b86ceb03408c8019788b99700ab62e7 0.0s
=> => naming to docker.io/library/finance-hub-backend 0.0s
WARN[0000] /volume2/docker/finance/finance-hub/docker-compose.yml: `version` is obsolete
[+] Running 2/2
✔ Container finance-hub-db-1 Healthy 0.0s
✔ Container finance-hub-backend-1 Running 0.0s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$ sudo docker exec finance-hub-db-1 psql -U finance -d finance_hub -c \
"DELETE FROM payments WHERE source = 'UPLOAD';"
DELETE 6
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/finance/finance-hub$
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
ssh
Close Tab
⌥⌘1
ssh...
|
12916
|
NULL
|
NULL
|
NULL
|
|
21498
|
941
|
17
|
2026-05-11T17:58:29.202472+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778522309202_m2.jpg...
|
Firefox
|
SQLite Web: db.sqlite — Personal
|
True
|
sqlite.screenpipe.lakylak.xyz/audio_transcriptions sqlite.screenpipe.lakylak.xyz/audio_transcriptions/content/...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
All docs · AFFiNE
All docs · AFFiNE
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
sqlite-web 0.7.2
sqlite-web 0.7.2
db.sqlite
db.sqlite
audio_transcriptions
287 rows, showing page 1
Query
Query
table name...
_sqlx_migrations
_sqlx_migrations
audio_chunks
audio_chunks
audio_tags
audio_tags
audio_transcriptions
audio_transcriptions
audio_transcriptions_fts (v)
audio_transcriptions_fts
(v)
audio_transcriptions_...
audio_transcriptions_...
audio_transcriptions_...
audio_transcriptions_...
audio_transcriptions_...
audio_transcriptions_...
elements
elements
elements_fts (v)
elements_fts
(v)
elements_fts_config
elements_fts_config
elements_fts_data
elements_fts_data
elements_fts_idx
elements_fts_idx
frames
frames
frames_fts (v)
frames_fts
(v)
frames_fts_config
frames_fts_config
frames_fts_data
frames_fts_data
frames_fts_idx
frames_fts_idx
meetings
meetings
memories
memories
memories_fts (v)
memories_fts
(v)
memories_fts_config
memories_fts_config
memories_fts_data
memories_fts_data
memories_fts_idx
memories_fts_idx
ocr_text
ocr_text
pipe_executions
pipe_executions
pipe_scheduler_state
pipe_scheduler_state
secrets
secrets
speaker_embeddings
speaker_embeddings
speakers
speakers
sqlite_sequence
sqlite_sequence
sqlite_stat1
sqlite_stat1
sqlite_stat4
sqlite_stat4
tags
tags
ui_events
ui_events
ui_events_fts (v)
ui_events_fts
(v)
ui_events_fts_config
ui_events_fts_config
ui_events_fts_data
ui_events_fts_data
ui_events_fts_idx
ui_events_fts_idx
video_chunks
video_chunks
vision_tags
vision_tags
Toggle helper tables
Toggle helper tables
Structure
Structure
Content
Content
Query
Query
Export
Export
id
id
audio_chunk_id
audio_chunk_id
offset_index
offset_index
timestamp
timestamp
transcription
transcription
device
device
is_input_device
is_input_device
speaker_id
speaker_id
transcription_engine
transcription_engine
start_time
start_time
end_time
end_time
text_length
text_length
sync_id
sync_id
synced_at
synced_at
redacted_at
redacted_at
1
16
0
2026-05-10T11:10:32+00:00
We remember, we remember, start.
soundcore AeroClip
True
1
WhisperTiny
21.9150625
24.8513125
33
NULL
NULL
NULL
2
18
0
2026-05-10T11:11:05+00:00
We'll
soundcore AeroClip
True
1
WhisperTiny
12.7519375
22.0669375
5
NULL
NULL
NULL
3
21
0
2026-05-10T11:11:35+00:00
a good job. I don't know how many people are t
...
...
soundcore AeroClip
True
1
WhisperTiny
0.3319375
29.8631875
131
NULL
NULL
NULL
4
23
0
2026-05-10T11:42:53+00:00
What is the general approach towards transcribing
...
...
soundcore AeroClip
True
1
WhisperTiny
19.9238125
24.5475625
51
NULL
NULL
NULL
5
23
0
2026-05-10T11:42:53+00:00
delay?
soundcore AeroClip
True
1
WhisperTiny
25.6444375
26.4713125
6
NULL
NULL
NULL
6
25
0
2026-05-10T11:43:25+00:00
What is the play when transcribe is to spread poi
...
...
soundcore AeroClip
True
1
WhisperTiny
2.7450625
11.2669375
119
NULL
NULL
NULL
7
30
0
2026-05-10T11:44:25+00:00
Thank you.
soundcore AeroClip
True
1
WhisperTiny
19.7044375
29.8631875
11
NULL
NULL
NULL
8
31...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.5,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.51329786,"top":0.06304868,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.5,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.51329786,"top":0.09577015,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All docs · AFFiNE","depth":4,"bounds":{"left":0.5,"top":0.11731844,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All docs · AFFiNE","depth":5,"bounds":{"left":0.51329786,"top":0.12849163,"width":0.029587766,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.5,"top":0.15003991,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.51329786,"top":0.16121309,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.5,"top":0.18276137,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.51329786,"top":0.19393456,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.5,"top":0.21548285,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.51329786,"top":0.22665602,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.5,"top":0.2482043,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.51329786,"top":0.25937748,"width":0.040724736,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.5,"top":0.28092578,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.51329786,"top":0.29209897,"width":0.03756649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.55651593,"top":0.28810853,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.5028258,"top":0.31524342,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.5028258,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.51379657,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.5249335,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.53607047,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.5472075,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"sqlite-web 0.7.2","depth":7,"bounds":{"left":0.57413566,"top":0.058260176,"width":0.043218084,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"sqlite-web 0.7.2","depth":8,"bounds":{"left":0.57413566,"top":0.06464485,"width":0.043218084,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"db.sqlite","depth":10,"bounds":{"left":0.62267286,"top":0.05865922,"width":0.023936171,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"db.sqlite","depth":11,"bounds":{"left":0.6253325,"top":0.066640064,"width":0.01861702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"audio_transcriptions","depth":10,"bounds":{"left":0.64660907,"top":0.066640064,"width":0.04454787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"287 rows, showing page 1","depth":9,"bounds":{"left":0.6924867,"top":0.06783719,"width":0.05069814,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Query","depth":8,"bounds":{"left":0.97639626,"top":0.061851557,"width":0.018284574,"height":0.023543496},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Query","depth":9,"bounds":{"left":0.9793883,"top":0.06743815,"width":0.012300532,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"table name...","depth":7,"bounds":{"left":0.5738032,"top":0.111332804,"width":0.061835106,"height":0.023942538},"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"_sqlx_migrations","depth":9,"bounds":{"left":0.5738032,"top":0.13527533,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"_sqlx_migrations","depth":10,"bounds":{"left":0.57712764,"top":0.13926576,"width":0.038896278,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"audio_chunks","depth":9,"bounds":{"left":0.5738032,"top":0.15802075,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"audio_chunks","depth":10,"bounds":{"left":0.57712764,"top":0.16201118,"width":0.031416222,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"audio_tags","depth":9,"bounds":{"left":0.5738032,"top":0.18076617,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"audio_tags","depth":10,"bounds":{"left":0.57712764,"top":0.18475658,"width":0.025099734,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"audio_transcriptions","depth":9,"bounds":{"left":0.5738032,"top":0.20351157,"width":0.06200133,"height":0.02434158},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"audio_transcriptions","depth":10,"bounds":{"left":0.5774601,"top":0.20830008,"width":0.04654255,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"audio_transcriptions_fts (v)","depth":9,"bounds":{"left":0.5738032,"top":0.22785315,"width":0.06200133,"height":0.040702313},"on_screen":true,"help_text":"audio_transcriptions_fts","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"audio_transcriptions_fts","depth":10,"bounds":{"left":0.57712764,"top":0.23184358,"width":0.055352394,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(v)","depth":11,"bounds":{"left":0.57712764,"top":0.2482043,"width":0.004986702,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"audio_transcriptions_...","depth":9,"bounds":{"left":0.5738032,"top":0.26855546,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"audio_transcriptions_fts_config","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"audio_transcriptions_...","depth":10,"bounds":{"left":0.57712764,"top":0.2725459,"width":0.053523935,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"audio_transcriptions_...","depth":9,"bounds":{"left":0.5738032,"top":0.29130086,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"audio_transcriptions_fts_data","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"audio_transcriptions_...","depth":10,"bounds":{"left":0.57712764,"top":0.2952913,"width":0.053523935,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"audio_transcriptions_...","depth":9,"bounds":{"left":0.5738032,"top":0.3140463,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"audio_transcriptions_fts_idx","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"audio_transcriptions_...","depth":10,"bounds":{"left":0.57712764,"top":0.3180367,"width":0.053523935,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"elements","depth":9,"bounds":{"left":0.5738032,"top":0.3367917,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"elements","depth":10,"bounds":{"left":0.57712764,"top":0.34078214,"width":0.020777926,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"elements_fts (v)","depth":9,"bounds":{"left":0.5738032,"top":0.35953712,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"elements_fts","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"elements_fts","depth":10,"bounds":{"left":0.57712764,"top":0.36352754,"width":0.030917553,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(v)","depth":11,"bounds":{"left":0.6080452,"top":0.36193135,"width":0.004986702,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"elements_fts_config","depth":9,"bounds":{"left":0.5738032,"top":0.38228253,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"elements_fts_config","depth":10,"bounds":{"left":0.57712764,"top":0.38627294,"width":0.04637633,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"elements_fts_data","depth":9,"bounds":{"left":0.5738032,"top":0.40502793,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"elements_fts_data","depth":10,"bounds":{"left":0.57712764,"top":0.40901837,"width":0.042220745,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"elements_fts_idx","depth":9,"bounds":{"left":0.5738032,"top":0.42777336,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"elements_fts_idx","depth":10,"bounds":{"left":0.57712764,"top":0.43176377,"width":0.0390625,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"frames","depth":9,"bounds":{"left":0.5738032,"top":0.45051876,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"frames","depth":10,"bounds":{"left":0.57712764,"top":0.45450917,"width":0.015791224,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"frames_fts (v)","depth":9,"bounds":{"left":0.5738032,"top":0.47326416,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"frames_fts","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"frames_fts","depth":10,"bounds":{"left":0.57712764,"top":0.4772546,"width":0.025930852,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(v)","depth":11,"bounds":{"left":0.6030585,"top":0.47565842,"width":0.004986702,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"frames_fts_config","depth":9,"bounds":{"left":0.5738032,"top":0.4960096,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"frames_fts_config","depth":10,"bounds":{"left":0.57712764,"top":0.5,"width":0.04138963,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"frames_fts_data","depth":9,"bounds":{"left":0.5738032,"top":0.51875496,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"frames_fts_data","depth":10,"bounds":{"left":0.57712764,"top":0.52274543,"width":0.03723404,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"frames_fts_idx","depth":9,"bounds":{"left":0.5738032,"top":0.5415004,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"frames_fts_idx","depth":10,"bounds":{"left":0.57712764,"top":0.5454908,"width":0.033909574,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"meetings","depth":9,"bounds":{"left":0.5738032,"top":0.5642458,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"meetings","depth":10,"bounds":{"left":0.57712764,"top":0.56823623,"width":0.020944148,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"memories","depth":9,"bounds":{"left":0.5738032,"top":0.58699125,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"memories","depth":10,"bounds":{"left":0.57712764,"top":0.59098166,"width":0.02244016,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"memories_fts (v)","depth":9,"bounds":{"left":0.5738032,"top":0.6097366,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"memories_fts","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"memories_fts","depth":10,"bounds":{"left":0.57712764,"top":0.61372703,"width":0.032579787,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(v)","depth":11,"bounds":{"left":0.6097075,"top":0.6121309,"width":0.004986702,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"memories_fts_config","depth":9,"bounds":{"left":0.5738032,"top":0.63248205,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"memories_fts_config","depth":10,"bounds":{"left":0.57712764,"top":0.63647246,"width":0.048038565,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"memories_fts_data","depth":9,"bounds":{"left":0.5738032,"top":0.6552275,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"memories_fts_data","depth":10,"bounds":{"left":0.57712764,"top":0.6592179,"width":0.043882977,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"memories_fts_idx","depth":9,"bounds":{"left":0.5738032,"top":0.67797285,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"memories_fts_idx","depth":10,"bounds":{"left":0.57712764,"top":0.68196326,"width":0.04055851,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ocr_text","depth":9,"bounds":{"left":0.5738032,"top":0.7007183,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ocr_text","depth":10,"bounds":{"left":0.57712764,"top":0.7047087,"width":0.018783245,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipe_executions","depth":9,"bounds":{"left":0.5738032,"top":0.7234637,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipe_executions","depth":10,"bounds":{"left":0.57712764,"top":0.7274541,"width":0.036901597,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipe_scheduler_state","depth":9,"bounds":{"left":0.5738032,"top":0.7462091,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipe_scheduler_state","depth":10,"bounds":{"left":0.57712764,"top":0.7501995,"width":0.049035903,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"secrets","depth":9,"bounds":{"left":0.5738032,"top":0.7689545,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"secrets","depth":10,"bounds":{"left":0.57712764,"top":0.7729449,"width":0.016788565,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"speaker_embeddings","depth":9,"bounds":{"left":0.5738032,"top":0.79169995,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"speaker_embeddings","depth":10,"bounds":{"left":0.57712764,"top":0.79569036,"width":0.04886968,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"speakers","depth":9,"bounds":{"left":0.5738032,"top":0.8144453,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"speakers","depth":10,"bounds":{"left":0.57712764,"top":0.8184357,"width":0.020611702,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"sqlite_sequence","depth":9,"bounds":{"left":0.5738032,"top":0.83719075,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"sqlite_sequence","depth":10,"bounds":{"left":0.57712764,"top":0.84118116,"width":0.03723404,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"sqlite_stat1","depth":9,"bounds":{"left":0.5738032,"top":0.8599362,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"sqlite_stat1","depth":10,"bounds":{"left":0.57712764,"top":0.8639266,"width":0.025930852,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"sqlite_stat4","depth":9,"bounds":{"left":0.5738032,"top":0.88268155,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"sqlite_stat4","depth":10,"bounds":{"left":0.57712764,"top":0.88667196,"width":0.026595745,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"tags","depth":9,"bounds":{"left":0.5738032,"top":0.905427,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"tags","depth":10,"bounds":{"left":0.57712764,"top":0.9094174,"width":0.009973404,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ui_events","depth":9,"bounds":{"left":0.5738032,"top":0.9281724,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ui_events","depth":10,"bounds":{"left":0.57712764,"top":0.9321628,"width":0.021775266,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ui_events_fts (v)","depth":9,"bounds":{"left":0.5738032,"top":0.9509178,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"ui_events_fts","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ui_events_fts","depth":10,"bounds":{"left":0.57712764,"top":0.9549082,"width":0.031914894,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(v)","depth":11,"bounds":{"left":0.6090425,"top":0.95331204,"width":0.0048204786,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ui_events_fts_config","depth":9,"bounds":{"left":0.5738032,"top":0.9736632,"width":0.06200133,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ui_events_fts_config","depth":10,"bounds":{"left":0.57712764,"top":0.9776536,"width":0.04737367,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ui_events_fts_data","depth":9,"bounds":{"left":0.5738032,"top":0.99640864,"width":0.06200133,"height":0.0035913587},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ui_events_fts_data","depth":10,"bounds":{"left":0.57712764,"top":1.0,"width":0.043218084,"height":-0.0003989935},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ui_events_fts_idx","depth":9,"bounds":{"left":0.5738032,"top":1.0,"width":0.06200133,"height":-0.019154072},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ui_events_fts_idx","depth":10,"bounds":{"left":0.57712764,"top":1.0,"width":0.039893616,"height":-0.023144484},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"video_chunks","depth":9,"bounds":{"left":0.5738032,"top":1.0,"width":0.06200133,"height":-0.041899443},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"video_chunks","depth":10,"bounds":{"left":0.57712764,"top":1.0,"width":0.03125,"height":-0.045889854},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vision_tags","depth":9,"bounds":{"left":0.5738032,"top":1.0,"width":0.06200133,"height":-0.06464481},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vision_tags","depth":10,"bounds":{"left":0.57712764,"top":1.0,"width":0.025930852,"height":-0.068635225},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Toggle helper tables","depth":8,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Toggle helper tables","depth":9,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Structure","depth":9,"bounds":{"left":0.6456117,"top":0.111332804,"width":0.03274601,"height":0.032322425},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Structure","depth":10,"bounds":{"left":0.6512633,"top":0.12011173,"width":0.02144282,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Content","depth":9,"bounds":{"left":0.6783577,"top":0.111332804,"width":0.029421542,"height":0.032322425},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Content","depth":10,"bounds":{"left":0.6840093,"top":0.12011173,"width":0.018118352,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Query","depth":9,"bounds":{"left":0.7077792,"top":0.111332804,"width":0.025265958,"height":0.032322425},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Query","depth":10,"bounds":{"left":0.7134308,"top":0.12011173,"width":0.013962766,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Export","depth":9,"bounds":{"left":0.7330452,"top":0.111332804,"width":0.026097074,"height":0.032322425},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Export","depth":10,"bounds":{"left":0.7386968,"top":0.12011173,"width":0.014793883,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"id","depth":10,"bounds":{"left":0.64727396,"top":0.16280925,"width":0.004155585,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"id","depth":11,"bounds":{"left":0.64727396,"top":0.16280925,"width":0.004155585,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"audio_chunk_id","depth":10,"bounds":{"left":0.6559175,"top":0.16280925,"width":0.034408245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"audio_chunk_id","depth":11,"bounds":{"left":0.6559175,"top":0.16280925,"width":0.034408245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"offset_index","depth":10,"bounds":{"left":0.69331783,"top":0.16280925,"width":0.027426861,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"offset_index","depth":11,"bounds":{"left":0.69331783,"top":0.16280925,"width":0.027426861,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"timestamp","depth":10,"bounds":{"left":0.7237367,"top":0.16280925,"width":0.023271276,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"timestamp","depth":11,"bounds":{"left":0.7237367,"top":0.16280925,"width":0.023271276,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"transcription","depth":10,"bounds":{"left":0.78740025,"top":0.16280925,"width":0.028091755,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"transcription","depth":11,"bounds":{"left":0.78740025,"top":0.16280925,"width":0.028091755,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"device","depth":10,"bounds":{"left":0.81848407,"top":0.16280925,"width":0.01412899,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"device","depth":11,"bounds":{"left":0.81848407,"top":0.16280925,"width":0.01412899,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"is_input_device","depth":10,"bounds":{"left":0.8429189,"top":0.16280925,"width":0.034408245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"is_input_device","depth":11,"bounds":{"left":0.8429189,"top":0.16280925,"width":0.034408245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"speaker_id","depth":10,"bounds":{"left":0.8803192,"top":0.16280925,"width":0.023769947,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"speaker_id","depth":11,"bounds":{"left":0.8803192,"top":0.16280925,"width":0.023769947,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"transcription_engine","depth":10,"bounds":{"left":0.9070811,"top":0.16280925,"width":0.04537899,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"transcription_engine","depth":11,"bounds":{"left":0.9070811,"top":0.16280925,"width":0.04537899,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"start_time","depth":10,"bounds":{"left":0.95545214,"top":0.16280925,"width":0.022772606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"start_time","depth":11,"bounds":{"left":0.95545214,"top":0.16280925,"width":0.022772606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"end_time","depth":10,"bounds":{"left":0.9835439,"top":0.16280925,"width":0.016456127,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"end_time","depth":11,"bounds":{"left":0.9835439,"top":0.16280925,"width":0.016456127,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"text_length","depth":10,"bounds":{"left":1.0,"top":0.16280925,"width":-0.011801839,"height":0.012769354},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"text_length","depth":11,"bounds":{"left":1.0,"top":0.16280925,"width":-0.011801839,"height":0.012769354},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"sync_id","depth":10,"bounds":{"left":1.0,"top":0.16280925,"width":-0.039893627,"height":0.012769354},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"sync_id","depth":11,"bounds":{"left":1.0,"top":0.16280925,"width":-0.039893627,"height":0.012769354},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"synced_at","depth":10,"bounds":{"left":1.0,"top":0.16280925,"width":-0.059674144,"height":0.012769354},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"synced_at","depth":11,"bounds":{"left":1.0,"top":0.16280925,"width":-0.059674144,"height":0.012769354},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"redacted_at","depth":10,"bounds":{"left":1.0,"top":0.16280925,"width":-0.08527255,"height":0.012769354},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"redacted_at","depth":11,"bounds":{"left":1.0,"top":0.16280925,"width":-0.08527255,"height":0.012769354},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":10,"bounds":{"left":0.64727396,"top":0.18076617,"width":0.0019946808,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16","depth":10,"bounds":{"left":0.6559175,"top":0.18076617,"width":0.004654255,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":10,"bounds":{"left":0.69331783,"top":0.18076617,"width":0.0028257978,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10T11:10:32+00:00","depth":10,"bounds":{"left":0.7237367,"top":0.18076617,"width":0.058843084,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"We remember, we remember, start.","depth":10,"bounds":{"left":0.78740025,"top":0.18076617,"width":0.021775266,"height":0.07581804},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"soundcore AeroClip","depth":10,"bounds":{"left":0.81848407,"top":0.18076617,"width":0.02144282,"height":0.028332002},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"True","depth":10,"bounds":{"left":0.8429189,"top":0.18076617,"width":0.009142287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":10,"bounds":{"left":0.8803192,"top":0.18076617,"width":0.0019946808,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WhisperTiny","depth":10,"bounds":{"left":0.9070811,"top":0.18076617,"width":0.025099734,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21.9150625","depth":10,"bounds":{"left":0.95545214,"top":0.18076617,"width":0.023769947,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"24.8513125","depth":10,"bounds":{"left":0.9835439,"top":0.18076617,"width":0.016456127,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"33","depth":10,"bounds":{"left":1.0,"top":0.18076617,"width":-0.011801839,"height":0.012769354},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.18236233,"width":-0.039893627,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.18236233,"width":-0.059674144,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.18236233,"width":-0.08527255,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":10,"bounds":{"left":0.64727396,"top":0.26177174,"width":0.0026595744,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18","depth":10,"bounds":{"left":0.6559175,"top":0.26177174,"width":0.004654255,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":10,"bounds":{"left":0.69331783,"top":0.26177174,"width":0.0028257978,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10T11:11:05+00:00","depth":10,"bounds":{"left":0.7237367,"top":0.26177174,"width":0.058344416,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"We'll","depth":10,"bounds":{"left":0.78740025,"top":0.26177174,"width":0.009807181,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"soundcore AeroClip","depth":10,"bounds":{"left":0.81848407,"top":0.26177174,"width":0.02144282,"height":0.028332002},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"True","depth":10,"bounds":{"left":0.8429189,"top":0.26177174,"width":0.009142287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":10,"bounds":{"left":0.8803192,"top":0.26177174,"width":0.0019946808,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WhisperTiny","depth":10,"bounds":{"left":0.9070811,"top":0.26177174,"width":0.025099734,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12.7519375","depth":10,"bounds":{"left":0.95545214,"top":0.26177174,"width":0.023271276,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22.0669375","depth":10,"bounds":{"left":0.9835439,"top":0.26177174,"width":0.016456127,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":10,"bounds":{"left":1.0,"top":0.26177174,"width":-0.011801839,"height":0.012769354},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.26336792,"width":-0.039893627,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.26336792,"width":-0.059674144,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.26336792,"width":-0.08527255,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":10,"bounds":{"left":0.64727396,"top":0.29569036,"width":0.0028257978,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21","depth":10,"bounds":{"left":0.6559175,"top":0.29569036,"width":0.004654255,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":10,"bounds":{"left":0.69331783,"top":0.29569036,"width":0.0028257978,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10T11:11:35+00:00","depth":10,"bounds":{"left":0.7237367,"top":0.29569036,"width":0.05817819,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"a good job. I don't know how many people are t","depth":10,"bounds":{"left":0.78740025,"top":0.29569036,"width":0.024933511,"height":0.059856344},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"...","depth":10,"bounds":{"left":0.78740025,"top":0.35834,"width":0.003656915,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"...","depth":11,"bounds":{"left":0.78740025,"top":0.35834,"width":0.003656915,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"soundcore AeroClip","depth":10,"bounds":{"left":0.81848407,"top":0.29569036,"width":0.02144282,"height":0.028332002},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"True","depth":10,"bounds":{"left":0.8429189,"top":0.29569036,"width":0.009142287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":10,"bounds":{"left":0.8803192,"top":0.29569036,"width":0.0019946808,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WhisperTiny","depth":10,"bounds":{"left":0.9070811,"top":0.29569036,"width":0.025099734,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.3319375","depth":10,"bounds":{"left":0.95545214,"top":0.29569036,"width":0.021609042,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"29.8631875","depth":10,"bounds":{"left":0.9835439,"top":0.29569036,"width":0.016456127,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"131","depth":10,"bounds":{"left":1.0,"top":0.29569036,"width":-0.011801839,"height":0.012769354},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.2972865,"width":-0.039893627,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.2972865,"width":-0.059674144,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.2972865,"width":-0.08527255,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4","depth":10,"bounds":{"left":0.64727396,"top":0.37629688,"width":0.0028257978,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23","depth":10,"bounds":{"left":0.6559175,"top":0.37629688,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":10,"bounds":{"left":0.69331783,"top":0.37629688,"width":0.0028257978,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10T11:42:53+00:00","depth":10,"bounds":{"left":0.7237367,"top":0.37629688,"width":0.059674203,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"What is the general approach towards transcribing","depth":10,"bounds":{"left":0.78740025,"top":0.37629688,"width":0.024268618,"height":0.07581804},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"...","depth":10,"bounds":{"left":0.78740025,"top":0.45490822,"width":0.003656915,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"...","depth":11,"bounds":{"left":0.78740025,"top":0.45490822,"width":0.003656915,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"soundcore AeroClip","depth":10,"bounds":{"left":0.81848407,"top":0.37629688,"width":0.02144282,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"True","depth":10,"bounds":{"left":0.8429189,"top":0.37629688,"width":0.009142287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":10,"bounds":{"left":0.8803192,"top":0.37629688,"width":0.0019946808,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WhisperTiny","depth":10,"bounds":{"left":0.9070811,"top":0.37629688,"width":0.025099734,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19.9238125","depth":10,"bounds":{"left":0.95545214,"top":0.37629688,"width":0.023769947,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"24.5475625","depth":10,"bounds":{"left":0.9835439,"top":0.37629688,"width":0.016456127,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"51","depth":10,"bounds":{"left":1.0,"top":0.37629688,"width":-0.011801839,"height":0.012769354},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.37789306,"width":-0.039893627,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.37789306,"width":-0.059674144,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.37789306,"width":-0.08527255,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":10,"bounds":{"left":0.64727396,"top":0.47326416,"width":0.0026595744,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23","depth":10,"bounds":{"left":0.6559175,"top":0.47326416,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":10,"bounds":{"left":0.69331783,"top":0.47326416,"width":0.0028257978,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10T11:42:53+00:00","depth":10,"bounds":{"left":0.7237367,"top":0.47326416,"width":0.059674203,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"delay?","depth":10,"bounds":{"left":0.78740025,"top":0.47326416,"width":0.012965426,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"soundcore AeroClip","depth":10,"bounds":{"left":0.81848407,"top":0.47326416,"width":0.02144282,"height":0.028332002},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"True","depth":10,"bounds":{"left":0.8429189,"top":0.47326416,"width":0.009142287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":10,"bounds":{"left":0.8803192,"top":0.47326416,"width":0.0019946808,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WhisperTiny","depth":10,"bounds":{"left":0.9070811,"top":0.47326416,"width":0.025099734,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25.6444375","depth":10,"bounds":{"left":0.95545214,"top":0.47326416,"width":0.025099734,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26.4713125","depth":10,"bounds":{"left":0.9835439,"top":0.47326416,"width":0.016456127,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6","depth":10,"bounds":{"left":1.0,"top":0.47326416,"width":-0.011801839,"height":0.012769354},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.47486034,"width":-0.039893627,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.47486034,"width":-0.059674144,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.47486034,"width":-0.08527255,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6","depth":10,"bounds":{"left":0.64727396,"top":0.5067837,"width":0.0028257978,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":10,"bounds":{"left":0.6559175,"top":0.5067837,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":10,"bounds":{"left":0.69331783,"top":0.5067837,"width":0.0028257978,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10T11:43:25+00:00","depth":10,"bounds":{"left":0.7237367,"top":0.5067837,"width":0.059674203,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"What is the play when transcribe is to spread poi","depth":10,"bounds":{"left":0.78740025,"top":0.5067837,"width":0.026595745,"height":0.059856344},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"...","depth":10,"bounds":{"left":0.78740025,"top":0.5698324,"width":0.003656915,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"...","depth":11,"bounds":{"left":0.78740025,"top":0.5698324,"width":0.003656915,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"soundcore AeroClip","depth":10,"bounds":{"left":0.81848407,"top":0.5067837,"width":0.02144282,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"True","depth":10,"bounds":{"left":0.8429189,"top":0.5067837,"width":0.009142287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":10,"bounds":{"left":0.8803192,"top":0.5067837,"width":0.0019946808,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WhisperTiny","depth":10,"bounds":{"left":0.9070811,"top":0.5067837,"width":0.025099734,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2.7450625","depth":10,"bounds":{"left":0.95545214,"top":0.5067837,"width":0.022107713,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11.2669375","depth":10,"bounds":{"left":0.9835439,"top":0.5067837,"width":0.016456127,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"119","depth":10,"bounds":{"left":1.0,"top":0.5067837,"width":-0.011801839,"height":0.012769354},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.5083799,"width":-0.039893627,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.5083799,"width":-0.059674144,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.5083799,"width":-0.08527255,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7","depth":10,"bounds":{"left":0.64727396,"top":0.5877893,"width":0.002493351,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"30","depth":10,"bounds":{"left":0.6559175,"top":0.5877893,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":10,"bounds":{"left":0.69331783,"top":0.5877893,"width":0.0028257978,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-05-10T11:44:25+00:00","depth":10,"bounds":{"left":0.7237367,"top":0.5877893,"width":0.059674203,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Thank you.","depth":10,"bounds":{"left":0.78740025,"top":0.5877893,"width":0.022273935,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"soundcore AeroClip","depth":10,"bounds":{"left":0.81848407,"top":0.5877893,"width":0.02144282,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"True","depth":10,"bounds":{"left":0.8429189,"top":0.5877893,"width":0.009142287,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":10,"bounds":{"left":0.8803192,"top":0.5877893,"width":0.0019946808,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WhisperTiny","depth":10,"bounds":{"left":0.9070811,"top":0.5877893,"width":0.025099734,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19.7044375","depth":10,"bounds":{"left":0.95545214,"top":0.5877893,"width":0.024102394,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"29.8631875","depth":10,"bounds":{"left":0.9835439,"top":0.5877893,"width":0.016456127,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11","depth":10,"bounds":{"left":1.0,"top":0.5877893,"width":-0.011801839,"height":0.012769354},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.58938545,"width":-0.039893627,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.58938545,"width":-0.059674144,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NULL","depth":11,"bounds":{"left":1.0,"top":0.58938545,"width":-0.08527255,"height":0.011173184},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8","depth":10,"bounds":{"left":0.64727396,"top":0.6217079,"width":0.0028257978,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31","depth":10,"bounds":{"left":0.6559175,"top":0.6217079,"width":0.004654255,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8657839891201777205
|
8615932100477194201
|
visual_change
|
accessibility
|
NULL
|
New Tab
New Tab
Screenpipe — Archive
Screenpipe — New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
All docs · AFFiNE
All docs · AFFiNE
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
New Tab
New Tab
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
sqlite-web 0.7.2
sqlite-web 0.7.2
db.sqlite
db.sqlite
audio_transcriptions
287 rows, showing page 1
Query
Query
table name...
_sqlx_migrations
_sqlx_migrations
audio_chunks
audio_chunks
audio_tags
audio_tags
audio_transcriptions
audio_transcriptions
audio_transcriptions_fts (v)
audio_transcriptions_fts
(v)
audio_transcriptions_...
audio_transcriptions_...
audio_transcriptions_...
audio_transcriptions_...
audio_transcriptions_...
audio_transcriptions_...
elements
elements
elements_fts (v)
elements_fts
(v)
elements_fts_config
elements_fts_config
elements_fts_data
elements_fts_data
elements_fts_idx
elements_fts_idx
frames
frames
frames_fts (v)
frames_fts
(v)
frames_fts_config
frames_fts_config
frames_fts_data
frames_fts_data
frames_fts_idx
frames_fts_idx
meetings
meetings
memories
memories
memories_fts (v)
memories_fts
(v)
memories_fts_config
memories_fts_config
memories_fts_data
memories_fts_data
memories_fts_idx
memories_fts_idx
ocr_text
ocr_text
pipe_executions
pipe_executions
pipe_scheduler_state
pipe_scheduler_state
secrets
secrets
speaker_embeddings
speaker_embeddings
speakers
speakers
sqlite_sequence
sqlite_sequence
sqlite_stat1
sqlite_stat1
sqlite_stat4
sqlite_stat4
tags
tags
ui_events
ui_events
ui_events_fts (v)
ui_events_fts
(v)
ui_events_fts_config
ui_events_fts_config
ui_events_fts_data
ui_events_fts_data
ui_events_fts_idx
ui_events_fts_idx
video_chunks
video_chunks
vision_tags
vision_tags
Toggle helper tables
Toggle helper tables
Structure
Structure
Content
Content
Query
Query
Export
Export
id
id
audio_chunk_id
audio_chunk_id
offset_index
offset_index
timestamp
timestamp
transcription
transcription
device
device
is_input_device
is_input_device
speaker_id
speaker_id
transcription_engine
transcription_engine
start_time
start_time
end_time
end_time
text_length
text_length
sync_id
sync_id
synced_at
synced_at
redacted_at
redacted_at
1
16
0
2026-05-10T11:10:32+00:00
We remember, we remember, start.
soundcore AeroClip
True
1
WhisperTiny
21.9150625
24.8513125
33
NULL
NULL
NULL
2
18
0
2026-05-10T11:11:05+00:00
We'll
soundcore AeroClip
True
1
WhisperTiny
12.7519375
22.0669375
5
NULL
NULL
NULL
3
21
0
2026-05-10T11:11:35+00:00
a good job. I don't know how many people are t
...
...
soundcore AeroClip
True
1
WhisperTiny
0.3319375
29.8631875
131
NULL
NULL
NULL
4
23
0
2026-05-10T11:42:53+00:00
What is the general approach towards transcribing
...
...
soundcore AeroClip
True
1
WhisperTiny
19.9238125
24.5475625
51
NULL
NULL
NULL
5
23
0
2026-05-10T11:42:53+00:00
delay?
soundcore AeroClip
True
1
WhisperTiny
25.6444375
26.4713125
6
NULL
NULL
NULL
6
25
0
2026-05-10T11:43:25+00:00
What is the play when transcribe is to spread poi
...
...
soundcore AeroClip
True
1
WhisperTiny
2.7450625
11.2669375
119
NULL
NULL
NULL
7
30
0
2026-05-10T11:44:25+00:00
Thank you.
soundcore AeroClip
True
1
WhisperTiny
19.7044375
29.8631875
11
NULL
NULL
NULL
8
31...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
10631
|
478
|
39
|
2026-05-08T17:36:20.491995+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778261780491_m2.jpg...
|
Firefox
|
Finally making the move to 4K thanks to DLSS 4.5 - Finally making the move to 4K thanks to DLSS 4.5 - kovaliklukas@gmail.com - Gmail — Personal...
|
True
|
mail.google.com/mail/u/0/#inbox/FMfcgzQgLXxkPRShLD mail.google.com/mail/u/0/#inbox/FMfcgzQgLXxkPRShLDLlpHhVMNHfvHQV...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
Home | Hostinger
Home | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Оптичен интернет за дома - EON телевизия | Vivacom | 5G
Оптичен интернет за дома - EON телевизия | Vivacom | 5G
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Sign in
Sign in
Finally making the move to 4K thanks to DLSS 4.5 - [EMAIL] - Gmail
Finally making the move to 4K thanks to DLSS 4.5 - [EMAIL] - Gmail
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to content
Skip to content
Using Gmail with screen readers
Using Gmail with screen readers
Main menu
Gmail
Search
Search
Search mail
Advanced search options
Search mail
Support
Settings
Ask Gemini
Google apps
Google Account: Lukáš Koválik ([EMAIL])
Compose
Labels
Labels
Inbox 41 unread
Inbox
41
Starred
Starred
Snoozed
Snoozed
Important
Important
Sent
Sent
Drafts 8 unread
Drafts
8
Purchases has menu
Purchases
Social 5200 unread has menu
Social
5,200
Updates 8802 unread has menu
Updates
8,802
Forums 6101 unread has menu
Forums
6,101
Promotions 38750 unread has menu
Promotions
38,750
More labels
More
Labels
Labels
Create new label
Labels
Labels
[Imap]/Nevyžiadaná pošta has menu
[Imap]/Nevyžiadaná pošta
arch has menu
arch
Deleted Items has menu
Deleted Items
Fibank 1229 unread has menu
Fibank
1,229
FL 6 unread has menu
FL
6
Hardware & Software has menu
Hardware & Software
HOSTING 5 unread has menu
HOSTING
5
Infected Items has menu
Infected Items
jiminny-github 7487 unread has menu
jiminny-github
7,487
Junk E-mail 219 unread has menu
Junk E-mail
219
Kontakty has menu
Kontakty
Sent Items has menu
Sent Items
WORK 848 unread has menu
WORK
848
z centra 1274 unread has menu
z centra
1,274
More labels
More
Back to Inbox
Archive
Report spam
Delete
Mark as unread
Move to
More email options
48
of
21,245
Newer
Older
Input tools on/off (Ctrl-Shift-K)
Select input tool
Print all
In new window
Finally making the move to 4K thanks to DLSS 4.5
Finally making the move to 4K thanks to DLSS 4.5
Not important
Search for all messages with label Inbox
Remove label Inbox from this conversation
XDA Verified sender [EMAIL] Unsubscribe
XDA Verified sender [EMAIL]
XDA
Verified sender
[EMAIL]
Unsubscribe
Unsubscribe
Fri 1 May, 15:05 (7 days ago)
Fri 1 May, 15:05 (7 days ago)
Not starred
You can't react to a group with an emoji
Reply
More message options
to
me
Show details
XDA Logo
May 1, 2026
Welcome to your pre-weekend hit!
We're just about to head into the weekend, but before we get prepped for an immersive gaming session across the two-day break, which resolution are you gaming on? 1440p continues to feel the sweet spot for many, and despite having capable hardware, like an RTX 4090, gamers continue to avoid 4K for a couple of reasons.
DLSS 4.5 is finally starting to make the switch to 4K make more sense, at least for AAA gaming. For starters, the upscaled image almost looks just as good as native 4K, and some might argue it looks slightly better than native with TAA. It's a bit heavier on the GPU than previous versions, but the improvements in motion stability make it worth it. Give it a go this weekend and see how you get on.
Love XDA? We have so much more!
Follow us on Google
Follow us on Google
I used to prefer gaming at 1440p, but DLSS 4.5 changed that
I used to prefer gaming at 1440p, but DLSS 4.5 changed that
Hamlin Rozario
By
Hamlin Rozario
Hamlin Rozario
Apr 30, 2026
Dell QD-OLED on a desk
As a competitive gamer who occasionally plays AAA titles, 1440p has always felt like the sweet spot for me. Despite having an RTX 4090, I couldn't fully move to 4K for a couple of reasons.
Read More »
Read More »
Your GPU upscales way more than just games, and old videos look incredible
Your GPU upscales way more than just games, and old videos look incredible
Samarveer Singh
By
Samarveer Singh
Samarveer Singh
Apr 30, 2026
nvidia geforce rtx 4070 super founders edition with power socket seen from an angle
Most of us first noticed GPU upscaling through games because of the cleaner edges, the sharper image quality, and, well, the "free" performance. Features like DLSS and FSR have made upscaling feel like magic, powered by dedicated hardware like tensor cores that reconstruct detail faster than brute force rendering ever did.
Read More »
Read More »
Running local AI on the Raspberry Pi 5 taught me why cloud models are still winning
Running local AI on the Raspberry Pi 5 taught me why cloud models are still winning
Charles Wolfe
By
Charles Wolfe
Charles Wolfe
Apr 30, 2026
raspberry pi 5.5
Except for Google's AI responses to searches, I've never used AI before, not once. Most people I know, when they hear this, say, "You haven't used AI? But it's so useful!" I disagreed; I'd seen the results Google's AI gave, and it
honestly seemed overhyped
honestly seemed overhyped
.
Read More »
Read More »
I never configure a home firewall without these three rules, and they stop the attacks most people don't know are happening
I never configure a home firewall without these three rules, and they stop the attacks most people don't know are happening
Joe Rice-Jones
By
Joe Rice-Jones
Joe Rice-Jones
Apr 30, 2026
unifi dream machine pro max and in-wall ap
Being connected to the internet has always been slightly dangerous, but in the age of automated scanning and AI, it's never been more so. Network security is something many assume their router is going to handle on its own, if they think about it at all, but the
myth of being too small to be worth targeting
is long over.
Read More »
Read More »
AMD Ryzen 7 7800X3D
AMD Ryzen 7 7800X3D
$325
$449
SAVE 28%
AMD Ryzen 7 7800X3D
AMD Ryzen 7 7800X3D
$325
$449
SAVE 28%
Samsung Galaxy Book5 Pro 360
Samsung Galaxy Book5 Pro 360
$1200
$1600
SAVE 25%
Samsung Galaxy Book5 Pro 360
Samsung Galaxy Book5 Pro 360
$1200
$1600
SAVE 25%
Linux is finally dropping support for ancient hardware, and it's about time
Linux is finally dropping support for ancient hardware, and it's about time
Simon Batt
By
Simon Batt
Simon Batt
Apr 30, 2026
A laptop running KDE Plasma and showing a context menu in the Dolphin file manager
Linux 7.1 has just entered the release candidate phase, and if it proves to be stable enough in the coming weeks, we should see it released fairly soon. The new version removes support for the i486 CPU, which was released in 1989, because it was infeasible to continue maintaining it when nobody was likely still using it.
Read More »
Read More »
Microsoft rolls out Xbox Mode, bringing a console-like experience to any PC
Microsoft rolls out Xbox Mode, bringing a console-like experience to any PC
Patrick O'Rourke
By
Patrick O'Rourke
Patrick O'Rourke
Apr 30, 2026
xbox-mode
Microsoft has rolled out its gaming-focused
Xbox Mode to all Windows 11 PCs and devices
Xbox Mode to all Windows 11 PCs and devices
, including laptops, tablets, handhelds, and more. The console-like overlay aims to simplify gaming on Windows 11 with a stripped-back Xbox-inspired UI that's snappier and more intuitive.
Read More »
Read More »
You are subscribed to XDA newsletters as
[EMAIL]
Click here
Click here
to access unlimited articles and new features by creating or logging into your account.
Manage Email Preferences
Manage Email Preferences
|
Unsubscribe
Unsubscribe
|
Privacy Policy
Privacy Policy
|
Terms of Use
Terms of Use
|
Careers
Careers
|
Contact
Contact
Valnet Inc, 740 Broadway, New York, NY 10003, USA
Reply
Reply
Forward
Forward
You can't react to a group with an emoji
Calendar
Keep
Tasks
Contacts
Get add-ons
Hide side panel...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.080784574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Home | Hostinger","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home | Hostinger","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.03025266,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nginx Proxy Manager","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nginx Proxy Manager","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.040724736,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.03756649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.11469415,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Оптичен интернет за дома - EON телевизия | Vivacom | 5G","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Оптичен интернет за дома - EON телевизия | Vivacom | 5G","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.105884306,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"AFFiNE - All In One KnowledgeOS","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AFFiNE - All In One KnowledgeOS","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.05851064,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All docs · AFFiNE","depth":4,"bounds":{"left":0.0,"top":0.3790902,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All docs · AFFiNE","depth":5,"bounds":{"left":0.013297873,"top":0.39026338,"width":0.029587766,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Sign in","depth":4,"bounds":{"left":0.0,"top":0.41181165,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sign in","depth":5,"bounds":{"left":0.013297873,"top":0.42298484,"width":0.011635638,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finally making the move to 4K thanks to DLSS 4.5 - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.0,"top":0.4445331,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Finally making the move to 4K thanks to DLSS 4.5 - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.013297873,"top":0.4557063,"width":0.14594415,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.10139628,"top":0.4517159,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.47885075,"width":0.108211435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to content","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Using Gmail with screen readers","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Using Gmail with screen readers","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Main menu","depth":11,"bounds":{"left":0.11768617,"top":0.058260176,"width":0.015957447,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXLink","text":"Gmail","depth":12,"bounds":{"left":0.1349734,"top":0.061452515,"width":0.036236703,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Search","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search mail","depth":18,"bounds":{"left":0.21708776,"top":0.06943336,"width":0.16389628,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Advanced search options","depth":12,"bounds":{"left":0.39428192,"top":0.058260176,"width":0.01861702,"height":0.03671189},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search mail","depth":12,"bounds":{"left":0.19880319,"top":0.058260176,"width":0.01861702,"height":0.03671189},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Support","depth":13,"bounds":{"left":0.42353722,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Settings","depth":13,"bounds":{"left":0.4381649,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ask Gemini","depth":13,"bounds":{"left":0.45212767,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Google apps","depth":14,"bounds":{"left":0.4660904,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Google Account: Lukáš Koválik (kovaliklukas@gmail.com)","depth":14,"bounds":{"left":0.4820479,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Compose","depth":9,"bounds":{"left":0.11635638,"top":0.10933759,"width":0.04737367,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Labels","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Labels","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Inbox 41 unread","depth":16,"bounds":{"left":0.1349734,"top":0.15003991,"width":0.012466756,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox","depth":17,"bounds":{"left":0.1349734,"top":0.15003991,"width":0.012466756,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"41","depth":16,"bounds":{"left":0.18666889,"top":0.15123703,"width":0.004155585,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Starred","depth":16,"bounds":{"left":0.1349734,"top":0.16919394,"width":0.015625,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Starred","depth":17,"bounds":{"left":0.1349734,"top":0.16919394,"width":0.015625,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Snoozed","depth":16,"bounds":{"left":0.1349734,"top":0.18834797,"width":0.018284574,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Snoozed","depth":17,"bounds":{"left":0.1349734,"top":0.18834797,"width":0.018284574,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Important","depth":17,"bounds":{"left":0.1349734,"top":0.207502,"width":0.020777926,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Important","depth":18,"bounds":{"left":0.1349734,"top":0.207502,"width":0.020777926,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sent","depth":16,"bounds":{"left":0.1349734,"top":0.22665602,"width":0.009640957,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sent","depth":17,"bounds":{"left":0.1349734,"top":0.22665602,"width":0.009640957,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Drafts 8 unread","depth":16,"bounds":{"left":0.1349734,"top":0.24581006,"width":0.013796543,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Drafts","depth":17,"bounds":{"left":0.1349734,"top":0.24581006,"width":0.013796543,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8","depth":16,"bounds":{"left":0.18866356,"top":0.24700718,"width":0.0021609042,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Purchases has menu","depth":16,"bounds":{"left":0.1349734,"top":0.26496407,"width":0.021941489,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Purchases","depth":17,"bounds":{"left":0.1349734,"top":0.26496407,"width":0.021941489,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Social 5200 unread has menu","depth":16,"bounds":{"left":0.1349734,"top":0.28411812,"width":0.013796543,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Social","depth":17,"bounds":{"left":0.1349734,"top":0.28411812,"width":0.013796543,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,200","depth":16,"bounds":{"left":0.18018617,"top":0.28531525,"width":0.010638298,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Updates 8802 unread has menu","depth":16,"bounds":{"left":0.1349734,"top":0.30327216,"width":0.018949468,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Updates","depth":17,"bounds":{"left":0.1349734,"top":0.30327216,"width":0.018949468,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8,802","depth":16,"bounds":{"left":0.18068483,"top":0.3044693,"width":0.010139627,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Forums 6101 unread has menu","depth":16,"bounds":{"left":0.1349734,"top":0.32242617,"width":0.016788565,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Forums","depth":17,"bounds":{"left":0.1349734,"top":0.32242617,"width":0.016788565,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6,101","depth":16,"bounds":{"left":0.18168218,"top":0.3236233,"width":0.009142287,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Promotions 38750 unread has menu","depth":16,"bounds":{"left":0.1349734,"top":0.3415802,"width":0.025930852,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Promotions","depth":17,"bounds":{"left":0.1349734,"top":0.3415802,"width":0.025930852,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"38,750","depth":16,"bounds":{"left":0.17852394,"top":0.34277734,"width":0.012300532,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More labels","depth":12,"bounds":{"left":0.113696806,"top":0.35834,"width":0.07978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"More","depth":14,"bounds":{"left":0.1349734,"top":0.36073422,"width":0.010804521,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Labels","depth":11,"bounds":{"left":0.122340426,"top":0.39984038,"width":0.061835106,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Labels","depth":12,"bounds":{"left":0.122340426,"top":0.39984038,"width":0.016456118,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create new label","depth":11,"bounds":{"left":0.18417554,"top":0.40023944,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Labels","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Labels","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"[Imap]/Nevyžiadaná pošta has menu","depth":16,"bounds":{"left":0.1349734,"top":0.42817238,"width":0.055352394,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[Imap]/Nevyžiadaná pošta","depth":17,"bounds":{"left":0.1349734,"top":0.42817238,"width":0.055352394,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"arch has menu","depth":16,"bounds":{"left":0.1349734,"top":0.44732642,"width":0.009474734,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"arch","depth":17,"bounds":{"left":0.1349734,"top":0.44732642,"width":0.009474734,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deleted Items has menu","depth":16,"bounds":{"left":0.1349734,"top":0.46648043,"width":0.029089095,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deleted Items","depth":17,"bounds":{"left":0.1349734,"top":0.46648043,"width":0.029089095,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Fibank 1229 unread has menu","depth":16,"bounds":{"left":0.1349734,"top":0.48563448,"width":0.01512633,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Fibank","depth":17,"bounds":{"left":0.1349734,"top":0.48563448,"width":0.01512633,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1,229","depth":16,"bounds":{"left":0.18168218,"top":0.4868316,"width":0.009142287,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"FL 6 unread has menu","depth":16,"bounds":{"left":0.1349734,"top":0.5047885,"width":0.005319149,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"FL","depth":17,"bounds":{"left":0.1349734,"top":0.5047885,"width":0.005319149,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6","depth":16,"bounds":{"left":0.18849733,"top":0.5059856,"width":0.0023271276,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Hardware & Software has menu","depth":16,"bounds":{"left":0.1349734,"top":0.52394253,"width":0.044714097,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hardware & Software","depth":17,"bounds":{"left":0.1349734,"top":0.52394253,"width":0.044714097,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"HOSTING 5 unread has menu","depth":16,"bounds":{"left":0.1349734,"top":0.54309654,"width":0.02144282,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"HOSTING","depth":17,"bounds":{"left":0.1349734,"top":0.54309654,"width":0.02144282,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":16,"bounds":{"left":0.18866356,"top":0.5442937,"width":0.0021609042,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Infected Items has menu","depth":16,"bounds":{"left":0.1349734,"top":0.5622506,"width":0.030086435,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Infected Items","depth":17,"bounds":{"left":0.1349734,"top":0.5622506,"width":0.030086435,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"jiminny-github 7487 unread has menu","depth":16,"bounds":{"left":0.1349734,"top":0.5814046,"width":0.03324468,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny-github","depth":17,"bounds":{"left":0.1349734,"top":0.5814046,"width":0.03324468,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7,487","depth":16,"bounds":{"left":0.18168218,"top":0.5826017,"width":0.009142287,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Junk E-mail 219 unread has menu","depth":16,"bounds":{"left":0.1349734,"top":0.60055864,"width":0.026761968,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Junk E-mail","depth":17,"bounds":{"left":0.1349734,"top":0.60055864,"width":0.026761968,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"219","depth":16,"bounds":{"left":0.18484043,"top":0.6017558,"width":0.005984043,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Kontakty has menu","depth":16,"bounds":{"left":0.1349734,"top":0.6197127,"width":0.018450798,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Kontakty","depth":17,"bounds":{"left":0.1349734,"top":0.6197127,"width":0.018450798,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sent Items has menu","depth":16,"bounds":{"left":0.1349734,"top":0.6388667,"width":0.022273935,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sent Items","depth":17,"bounds":{"left":0.1349734,"top":0.6388667,"width":0.022273935,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"WORK 848 unread has menu","depth":16,"bounds":{"left":0.1349734,"top":0.65802073,"width":0.014461436,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"WORK","depth":17,"bounds":{"left":0.1349734,"top":0.65802073,"width":0.014461436,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"848","depth":16,"bounds":{"left":0.18417554,"top":0.6592179,"width":0.0066489363,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"z centra 1274 unread has menu","depth":16,"bounds":{"left":0.1349734,"top":0.6771748,"width":0.018118352,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"z centra","depth":17,"bounds":{"left":0.1349734,"top":0.6771748,"width":0.018118352,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1,274","depth":16,"bounds":{"left":0.18201463,"top":0.6783719,"width":0.00880984,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More labels","depth":12,"bounds":{"left":0.113696806,"top":0.69393456,"width":0.07978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"More","depth":14,"bounds":{"left":0.1349734,"top":0.6963288,"width":0.010804521,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Back to Inbox","depth":11,"bounds":{"left":0.20412233,"top":0.11412609,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Archive","depth":11,"bounds":{"left":0.22273937,"top":0.11412609,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Report spam","depth":11,"bounds":{"left":0.23736702,"top":0.11412609,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Delete","depth":11,"bounds":{"left":0.25199467,"top":0.11412609,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Mark as unread","depth":11,"bounds":{"left":0.27194148,"top":0.11412609,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Move to","depth":11,"bounds":{"left":0.28656915,"top":0.11412609,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"More email options","depth":11,"bounds":{"left":0.29986703,"top":0.11412609,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"More","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"48","depth":11,"bounds":{"left":0.4039229,"top":0.11612131,"width":0.004488032,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"of","depth":11,"bounds":{"left":0.4084109,"top":0.11612131,"width":0.0056515955,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21,245","depth":11,"bounds":{"left":0.4140625,"top":0.11612131,"width":0.011469414,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Newer","depth":10,"bounds":{"left":0.43218085,"top":0.11412609,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Older","depth":10,"bounds":{"left":0.44547874,"top":0.11412609,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Input tools on/off (Ctrl-Shift-K)","depth":11,"bounds":{"left":0.4574468,"top":0.11412609,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Select input tool","depth":11,"bounds":{"left":0.46409574,"top":0.11412609,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Print all","depth":13,"bounds":{"left":0.45412233,"top":0.15243416,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"In new window","depth":13,"bounds":{"left":0.4660904,"top":0.15243416,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Finally making the move to 4K thanks to DLSS 4.5","depth":13,"bounds":{"left":0.22273937,"top":0.15722266,"width":0.16555852,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Finally making the move to 4K thanks to DLSS 4.5","depth":14,"bounds":{"left":0.22273937,"top":0.15722266,"width":0.16223404,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Not important","depth":14,"bounds":{"left":0.3849734,"top":0.15203512,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search for all messages with label Inbox","depth":15,"bounds":{"left":0.39827126,"top":0.16121309,"width":0.011968086,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Remove label Inbox from this conversation","depth":15,"bounds":{"left":0.41023937,"top":0.16121309,"width":0.0048204786,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"XDA Verified sender newsletter@xda-developers.com Unsubscribe","depth":23,"bounds":{"left":0.22273937,"top":0.19553073,"width":0.12134308,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXCell","text":"XDA Verified sender newsletter@xda-developers.com","depth":24,"bounds":{"left":0.22273937,"top":0.19752593,"width":0.083277926,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"XDA","depth":25,"bounds":{"left":0.22273937,"top":0.1963288,"width":0.009807181,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Verified sender","depth":25,"bounds":{"left":0.23354389,"top":0.19752593,"width":0.007978723,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"newsletter@xda-developers.com","depth":25,"bounds":{"left":0.2435173,"top":0.19752593,"width":0.059507977,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Unsubscribe","depth":25,"bounds":{"left":0.30867687,"top":0.19553073,"width":0.035405584,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unsubscribe","depth":26,"bounds":{"left":0.31266624,"top":0.1963288,"width":0.027426861,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Fri 1 May, 15:05 (7 days ago)","depth":20,"bounds":{"left":0.3721742,"top":0.19553073,"width":0.05069814,"height":0.015961692},"on_screen":true,"help_text":"1 May 2026, 15:05","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fri 1 May, 15:05 (7 days ago)","depth":21,"bounds":{"left":0.3721742,"top":0.19752593,"width":0.05069814,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Not starred","depth":21,"bounds":{"left":0.42952126,"top":0.19553073,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"You can't react to a group with an emoji","depth":21,"bounds":{"left":0.43949467,"top":0.18754987,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Reply","depth":21,"bounds":{"left":0.45279256,"top":0.18754987,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More message options","depth":22,"bounds":{"left":0.4660904,"top":0.18754987,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"to","depth":24,"bounds":{"left":0.22273937,"top":0.21348763,"width":0.004654255,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"me","depth":24,"bounds":{"left":0.22739361,"top":0.21348763,"width":0.0056515955,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Show details","depth":23,"bounds":{"left":0.234375,"top":0.21468475,"width":0.0039893617,"height":0.009577015},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"XDA Logo","depth":26,"bounds":{"left":0.3073471,"top":0.29768556,"width":0.084109046,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"May 1, 2026","depth":23,"bounds":{"left":0.3257979,"top":0.34317636,"width":0.02925532,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Welcome to your pre-weekend hit!","depth":23,"bounds":{"left":0.2523271,"top":0.37509975,"width":0.08643617,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"We're just about to head into the weekend, but before we get prepped for an immersive gaming session across the two-day break, which resolution are you gaming on? 1440p continues to feel the sweet spot for many, and despite having capable hardware, like an RTX 4090, gamers continue to avoid 4K for a couple of reasons.","depth":22,"bounds":{"left":0.2523271,"top":0.40702313,"width":0.19148937,"height":0.08978452},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DLSS 4.5 is finally starting to make the switch to 4K make more sense, at least for AAA gaming. For starters, the upscaled image almost looks just as good as native 4K, and some might argue it looks slightly better than native with TAA. It's a bit heavier on the GPU than previous versions, but the improvements in motion stability make it worth it. Give it a go this weekend and see how you get on.","depth":22,"bounds":{"left":0.2523271,"top":0.5219473,"width":0.1931516,"height":0.08978452},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Love XDA? We have so much more!","depth":23,"bounds":{"left":0.2523271,"top":0.63048685,"width":0.0909242,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Follow us on Google","depth":23,"bounds":{"left":0.25764626,"top":0.67517954,"width":0.048537236,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Follow us on Google","depth":24,"bounds":{"left":0.25764626,"top":0.67517954,"width":0.048537236,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"I used to prefer gaming at 1440p, but DLSS 4.5 changed that","depth":23,"bounds":{"left":0.25764626,"top":0.7681564,"width":0.17619681,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I used to prefer gaming at 1440p, but DLSS 4.5 changed that","depth":24,"bounds":{"left":0.25764626,"top":0.76935357,"width":0.17586437,"height":0.035514764},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Hamlin Rozario","depth":23,"bounds":{"left":0.25764626,"top":0.81923383,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"By","depth":23,"bounds":{"left":0.27426863,"top":0.8228252,"width":0.0066489363,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Hamlin Rozario","depth":23,"bounds":{"left":0.28091756,"top":0.8228252,"width":0.033909574,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hamlin Rozario","depth":24,"bounds":{"left":0.28091756,"top":0.8228252,"width":0.033909574,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apr 30, 2026","depth":23,"bounds":{"left":0.27426863,"top":0.8355946,"width":0.026595745,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dell QD-OLED on a desk","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"As a competitive gamer who occasionally plays AAA titles, 1440p has always felt like the sweet spot for me. Despite having an RTX 4090, I couldn't fully move to 4K for a couple of reasons.","depth":23,"bounds":{"left":0.25764626,"top":0.8922586,"width":0.16356383,"height":0.051476456},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read More »","depth":23,"bounds":{"left":0.359375,"top":0.9596967,"width":0.07446808,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read More »","depth":24,"bounds":{"left":0.38081783,"top":0.97206706,"width":0.03158245,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Your GPU upscales way more than just games, and old videos look incredible","depth":23,"bounds":{"left":0.25764626,"top":1.0,"width":0.17619681,"height":-0.07462096},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Your GPU upscales way more than just games, and old videos look incredible","depth":24,"bounds":{"left":0.25764626,"top":1.0,"width":0.17353724,"height":-0.07581806},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Samarveer Singh","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"By","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Samarveer Singh","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Samarveer Singh","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apr 30, 2026","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"nvidia geforce rtx 4070 super founders edition with power socket seen from an angle","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Most of us first noticed GPU upscaling through games because of the cleaner edges, the sharper image quality, and, well, the \"free\" performance. Features like DLSS and FSR have made upscaling feel like magic, powered by dedicated hardware like tensor cores that reconstruct detail faster than brute force rendering ever did.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read More »","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read More »","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Running local AI on the Raspberry Pi 5 taught me why cloud models are still winning","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Running local AI on the Raspberry Pi 5 taught me why cloud models are still winning","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Charles Wolfe","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"By","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Charles Wolfe","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Charles Wolfe","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apr 30, 2026","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"raspberry pi 5.5","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Except for Google's AI responses to searches, I've never used AI before, not once. Most people I know, when they hear this, say, \"You haven't used AI? But it's so useful!\" I disagreed; I'd seen the results Google's AI gave, and it","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"honestly seemed overhyped","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"honestly seemed overhyped","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read More »","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read More »","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"I never configure a home firewall without these three rules, and they stop the attacks most people don't know are happening","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I never configure a home firewall without these three rules, and they stop the attacks most people don't know are happening","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Joe Rice-Jones","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"By","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Joe Rice-Jones","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Joe Rice-Jones","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apr 30, 2026","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"unifi dream machine pro max and in-wall ap","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Being connected to the internet has always been slightly dangerous, but in the age of automated scanning and AI, it's never been more so. Network security is something many assume their router is going to handle on its own, if they think about it at all, but the","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"myth of being too small to be worth targeting","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is long over.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read More »","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read More »","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"AMD Ryzen 7 7800X3D","depth":28,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AMD Ryzen 7 7800X3D","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$325","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$449","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SAVE 28%","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"AMD Ryzen 7 7800X3D","depth":28,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AMD Ryzen 7 7800X3D","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$325","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$449","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SAVE 28%","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Samsung Galaxy Book5 Pro 360","depth":28,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Samsung Galaxy Book5 Pro 360","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$1200","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$1600","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SAVE 25%","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Samsung Galaxy Book5 Pro 360","depth":28,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Samsung Galaxy Book5 Pro 360","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$1200","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$1600","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SAVE 25%","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Linux is finally dropping support for ancient hardware, and it's about time","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Linux is finally dropping support for ancient hardware, and it's about time","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Simon Batt","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"By","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Simon Batt","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Simon Batt","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apr 30, 2026","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"A laptop running KDE Plasma and showing a context menu in the Dolphin file manager","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Linux 7.1 has just entered the release candidate phase, and if it proves to be stable enough in the coming weeks, we should see it released fairly soon. The new version removes support for the i486 CPU, which was released in 1989, because it was infeasible to continue maintaining it when nobody was likely still using it.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read More »","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read More »","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Microsoft rolls out Xbox Mode, bringing a console-like experience to any PC","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Microsoft rolls out Xbox Mode, bringing a console-like experience to any PC","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Patrick O'Rourke","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"By","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Patrick O'Rourke","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Patrick O'Rourke","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apr 30, 2026","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"xbox-mode","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Microsoft has rolled out its gaming-focused","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Xbox Mode to all Windows 11 PCs and devices","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Xbox Mode to all Windows 11 PCs and devices","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", including laptops, tablets, handhelds, and more. The console-like overlay aims to simplify gaming on Windows 11 with a stripped-back Xbox-inspired UI that's snappier and more intuitive.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read More »","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read More »","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You are subscribed to XDA newsletters as","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"kovaliklukas@gmail.com","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Click here","depth":27,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Click here","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to access unlimited articles and new features by creating or logging into your account.","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Manage Email Preferences","depth":26,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Manage Email Preferences","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"|","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Unsubscribe","depth":26,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unsubscribe","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"|","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Privacy Policy","depth":26,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Privacy Policy","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"|","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Terms of Use","depth":26,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Terms of Use","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"|","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Careers","depth":26,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Careers","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"|","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Contact","depth":26,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Contact","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Valnet Inc, 740 Broadway, New York, NY 10003, USA","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reply","depth":14,"bounds":{"left":0.22273937,"top":0.9465283,"width":0.034574468,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reply","depth":15,"bounds":{"left":0.23786569,"top":0.9537111,"width":0.012300532,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Forward","depth":14,"bounds":{"left":0.2599734,"top":0.9465283,"width":0.03723404,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Forward","depth":15,"bounds":{"left":0.27360374,"top":0.9537111,"width":0.017952127,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"You can't react to a group with an emoji","depth":15,"bounds":{"left":0.29986703,"top":0.9465283,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Calendar","depth":10,"bounds":{"left":0.48138297,"top":0.10295291,"width":0.01861702,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Keep","depth":10,"bounds":{"left":0.48138297,"top":0.14764565,"width":0.01861702,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Tasks","depth":10,"bounds":{"left":0.48138297,"top":0.19233839,"width":0.01861702,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Contacts","depth":10,"bounds":{"left":0.48138297,"top":0.23703113,"width":0.01861702,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Get add-ons","depth":10,"bounds":{"left":0.48138297,"top":0.30806065,"width":0.01861702,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Hide side panel","depth":9,"bounds":{"left":0.48138297,"top":0.95530725,"width":0.01861702,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
8657760664432582001
|
9175684113904599915
|
click
|
accessibility
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
Home | Hostinger
Home | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Оптичен интернет за дома - EON телевизия | Vivacom | 5G
Оптичен интернет за дома - EON телевизия | Vivacom | 5G
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Sign in
Sign in
Finally making the move to 4K thanks to DLSS 4.5 - [EMAIL] - Gmail
Finally making the move to 4K thanks to DLSS 4.5 - [EMAIL] - Gmail
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to content
Skip to content
Using Gmail with screen readers
Using Gmail with screen readers
Main menu
Gmail
Search
Search
Search mail
Advanced search options
Search mail
Support
Settings
Ask Gemini
Google apps
Google Account: Lukáš Koválik ([EMAIL])
Compose
Labels
Labels
Inbox 41 unread
Inbox
41
Starred
Starred
Snoozed
Snoozed
Important
Important
Sent
Sent
Drafts 8 unread
Drafts
8
Purchases has menu
Purchases
Social 5200 unread has menu
Social
5,200
Updates 8802 unread has menu
Updates
8,802
Forums 6101 unread has menu
Forums
6,101
Promotions 38750 unread has menu
Promotions
38,750
More labels
More
Labels
Labels
Create new label
Labels
Labels
[Imap]/Nevyžiadaná pošta has menu
[Imap]/Nevyžiadaná pošta
arch has menu
arch
Deleted Items has menu
Deleted Items
Fibank 1229 unread has menu
Fibank
1,229
FL 6 unread has menu
FL
6
Hardware & Software has menu
Hardware & Software
HOSTING 5 unread has menu
HOSTING
5
Infected Items has menu
Infected Items
jiminny-github 7487 unread has menu
jiminny-github
7,487
Junk E-mail 219 unread has menu
Junk E-mail
219
Kontakty has menu
Kontakty
Sent Items has menu
Sent Items
WORK 848 unread has menu
WORK
848
z centra 1274 unread has menu
z centra
1,274
More labels
More
Back to Inbox
Archive
Report spam
Delete
Mark as unread
Move to
More email options
48
of
21,245
Newer
Older
Input tools on/off (Ctrl-Shift-K)
Select input tool
Print all
In new window
Finally making the move to 4K thanks to DLSS 4.5
Finally making the move to 4K thanks to DLSS 4.5
Not important
Search for all messages with label Inbox
Remove label Inbox from this conversation
XDA Verified sender [EMAIL] Unsubscribe
XDA Verified sender [EMAIL]
XDA
Verified sender
[EMAIL]
Unsubscribe
Unsubscribe
Fri 1 May, 15:05 (7 days ago)
Fri 1 May, 15:05 (7 days ago)
Not starred
You can't react to a group with an emoji
Reply
More message options
to
me
Show details
XDA Logo
May 1, 2026
Welcome to your pre-weekend hit!
We're just about to head into the weekend, but before we get prepped for an immersive gaming session across the two-day break, which resolution are you gaming on? 1440p continues to feel the sweet spot for many, and despite having capable hardware, like an RTX 4090, gamers continue to avoid 4K for a couple of reasons.
DLSS 4.5 is finally starting to make the switch to 4K make more sense, at least for AAA gaming. For starters, the upscaled image almost looks just as good as native 4K, and some might argue it looks slightly better than native with TAA. It's a bit heavier on the GPU than previous versions, but the improvements in motion stability make it worth it. Give it a go this weekend and see how you get on.
Love XDA? We have so much more!
Follow us on Google
Follow us on Google
I used to prefer gaming at 1440p, but DLSS 4.5 changed that
I used to prefer gaming at 1440p, but DLSS 4.5 changed that
Hamlin Rozario
By
Hamlin Rozario
Hamlin Rozario
Apr 30, 2026
Dell QD-OLED on a desk
As a competitive gamer who occasionally plays AAA titles, 1440p has always felt like the sweet spot for me. Despite having an RTX 4090, I couldn't fully move to 4K for a couple of reasons.
Read More »
Read More »
Your GPU upscales way more than just games, and old videos look incredible
Your GPU upscales way more than just games, and old videos look incredible
Samarveer Singh
By
Samarveer Singh
Samarveer Singh
Apr 30, 2026
nvidia geforce rtx 4070 super founders edition with power socket seen from an angle
Most of us first noticed GPU upscaling through games because of the cleaner edges, the sharper image quality, and, well, the "free" performance. Features like DLSS and FSR have made upscaling feel like magic, powered by dedicated hardware like tensor cores that reconstruct detail faster than brute force rendering ever did.
Read More »
Read More »
Running local AI on the Raspberry Pi 5 taught me why cloud models are still winning
Running local AI on the Raspberry Pi 5 taught me why cloud models are still winning
Charles Wolfe
By
Charles Wolfe
Charles Wolfe
Apr 30, 2026
raspberry pi 5.5
Except for Google's AI responses to searches, I've never used AI before, not once. Most people I know, when they hear this, say, "You haven't used AI? But it's so useful!" I disagreed; I'd seen the results Google's AI gave, and it
honestly seemed overhyped
honestly seemed overhyped
.
Read More »
Read More »
I never configure a home firewall without these three rules, and they stop the attacks most people don't know are happening
I never configure a home firewall without these three rules, and they stop the attacks most people don't know are happening
Joe Rice-Jones
By
Joe Rice-Jones
Joe Rice-Jones
Apr 30, 2026
unifi dream machine pro max and in-wall ap
Being connected to the internet has always been slightly dangerous, but in the age of automated scanning and AI, it's never been more so. Network security is something many assume their router is going to handle on its own, if they think about it at all, but the
myth of being too small to be worth targeting
is long over.
Read More »
Read More »
AMD Ryzen 7 7800X3D
AMD Ryzen 7 7800X3D
$325
$449
SAVE 28%
AMD Ryzen 7 7800X3D
AMD Ryzen 7 7800X3D
$325
$449
SAVE 28%
Samsung Galaxy Book5 Pro 360
Samsung Galaxy Book5 Pro 360
$1200
$1600
SAVE 25%
Samsung Galaxy Book5 Pro 360
Samsung Galaxy Book5 Pro 360
$1200
$1600
SAVE 25%
Linux is finally dropping support for ancient hardware, and it's about time
Linux is finally dropping support for ancient hardware, and it's about time
Simon Batt
By
Simon Batt
Simon Batt
Apr 30, 2026
A laptop running KDE Plasma and showing a context menu in the Dolphin file manager
Linux 7.1 has just entered the release candidate phase, and if it proves to be stable enough in the coming weeks, we should see it released fairly soon. The new version removes support for the i486 CPU, which was released in 1989, because it was infeasible to continue maintaining it when nobody was likely still using it.
Read More »
Read More »
Microsoft rolls out Xbox Mode, bringing a console-like experience to any PC
Microsoft rolls out Xbox Mode, bringing a console-like experience to any PC
Patrick O'Rourke
By
Patrick O'Rourke
Patrick O'Rourke
Apr 30, 2026
xbox-mode
Microsoft has rolled out its gaming-focused
Xbox Mode to all Windows 11 PCs and devices
Xbox Mode to all Windows 11 PCs and devices
, including laptops, tablets, handhelds, and more. The console-like overlay aims to simplify gaming on Windows 11 with a stripped-back Xbox-inspired UI that's snappier and more intuitive.
Read More »
Read More »
You are subscribed to XDA newsletters as
[EMAIL]
Click here
Click here
to access unlimited articles and new features by creating or logging into your account.
Manage Email Preferences
Manage Email Preferences
|
Unsubscribe
Unsubscribe
|
Privacy Policy
Privacy Policy
|
Terms of Use
Terms of Use
|
Careers
Careers
|
Contact
Contact
Valnet Inc, 740 Broadway, New York, NY 10003, USA
Reply
Reply
Forward
Forward
You can't react to a group with an emoji
Calendar
Keep
Tasks
Contacts
Get add-ons
Hide side panel...
|
10630
|
NULL
|
NULL
|
NULL
|
|
10632
|
477
|
33
|
2026-05-08T17:36:20.548932+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778261780548_m1.jpg...
|
Firefox
|
Finally making the move to 4K thanks to DLSS 4.5 - Finally making the move to 4K thanks to DLSS 4.5 - kovaliklukas@gmail.com - Gmail — Personal...
|
True
|
mail.google.com/mail/u/0/#inbox/FMfcgzQgLXxkPRShLD mail.google.com/mail/u/0/#inbox/FMfcgzQgLXxkPRShLDLlpHhVMNHfvHQV...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
Home | Hostinger
Home | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Оптичен интернет за дома - EON телевизия | Vivacom | 5G
Оптичен интернет за дома - EON телевизия | Vivacom | 5G
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Sign in
Sign in
Finally making the move to 4K thanks to DLSS 4.5 - [EMAIL] - Gmail
Finally making the move to 4K thanks to DLSS 4.5 - [EMAIL] - Gmail
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to content
Skip to content
Using Gmail with screen readers
Using Gmail with screen readers
Main menu
Gmail
Search
Search
Search mail
Advanced search options
Search mail
Support
Settings
Ask Gemini
Google apps
Google Account: Lukáš Koválik ([EMAIL])
Compose
Labels
Labels
Inbox 41 unread
Inbox
41
Starred
Starred
Snoozed
Snoozed
Important
Important
Sent
Sent
Drafts 8 unread
Drafts
8
Purchases has menu
Purchases
Social 5200 unread has menu
Social
5,200
Updates 8802 unread has menu
Updates
8,802
Forums 6101 unread has menu
Forums
6,101
Promotions 38750 unread has menu
Promotions
38,750
More labels
More
Labels
Labels
Create new label
Labels
Labels
[Imap]/Nevyžiadaná pošta has menu
[Imap]/Nevyžiadaná pošta
arch has menu
arch
Deleted Items has menu
Deleted Items
Fibank 1229 unread has menu
Fibank
1,229
FL 6 unread has menu
FL
6
Hardware & Software has menu
Hardware & Software
HOSTING 5 unread has menu
HOSTING
5
Infected Items has menu
Infected Items
jiminny-github 7487 unread has menu
jiminny-github
7,487
Junk E-mail 219 unread has menu
Junk E-mail
219
Kontakty has menu
Kontakty
Sent Items has menu
Sent Items
WORK 848 unread has menu
WORK
848
z centra 1274 unread has menu
z centra
1,274
More labels
More
Back to Inbox
Archive
Report spam
Delete
Mark as unread
Move to
More email options
48
of
21,245
Newer
Older
Input tools on/off (Ctrl-Shift-K)
Select input tool
Print all
In new window
Finally making the move to 4K thanks to DLSS 4.5
Finally making the move to 4K thanks to DLSS 4.5
Not important
Search for all messages with label Inbox
Remove label Inbox from this conversation
XDA Verified sender [EMAIL] Unsubscribe
XDA Verified sender [EMAIL]
XDA
Verified sender
[EMAIL]
Unsubscribe
Unsubscribe
Fri 1 May, 15:05 (7 days ago)
Fri 1 May, 15:05 (7 days ago)
Not starred
You can't react to a group with an emoji
Reply
More message options
to
me
Show details
XDA Logo
May 1, 2026
Welcome to your pre-weekend hit!
We're just about to head into the weekend, but before we get prepped for an immersive gaming session across the two-day break, which resolution are you gaming on? 1440p continues to feel the sweet spot for many, and despite having capable hardware, like an RTX 4090, gamers continue to avoid 4K for a couple of reasons.
DLSS 4.5 is finally starting to make the switch to 4K make more sense, at least for AAA gaming. For starters, the upscaled image almost looks just as good as native 4K, and some might argue it looks slightly better than native with TAA. It's a bit heavier on the GPU than previous versions, but the improvements in motion stability make it worth it. Give it a go this weekend and see how you get on.
Love XDA? We have so much more!
Follow us on Google
Follow us on Google
I used to prefer gaming at 1440p, but DLSS 4.5 changed that
I used to prefer gaming at 1440p, but DLSS 4.5 changed that
Hamlin Rozario
By
Hamlin Rozario
Hamlin Rozario
Apr 30, 2026
Dell QD-OLED on a desk
As a competitive gamer who occasionally plays AAA titles, 1440p has always felt like the sweet spot for me. Despite having an RTX 4090, I couldn't fully move to 4K for a couple of reasons.
Read More »
Read More »
Your GPU upscales way more than just games, and old videos look incredible
Your GPU upscales way more than just games, and old videos look incredible
Samarveer Singh
By
Samarveer Singh
Samarveer Singh
Apr 30, 2026
nvidia geforce rtx 4070 super founders edition with power socket seen from an angle
Most of us first noticed GPU upscaling through games because of the cleaner edges, the sharper image quality, and, well, the "free" performance. Features like DLSS and FSR have made upscaling feel like magic, powered by dedicated hardware like tensor cores that reconstruct detail faster than brute force rendering ever did.
Read More »
Read More »
Running local AI on the Raspberry Pi 5 taught me why cloud models are still winning
Running local AI on the Raspberry Pi 5 taught me why cloud models are still winning
Charles Wolfe
By
Charles Wolfe
Charles Wolfe
Apr 30, 2026
raspberry pi 5.5
Except for Google's AI responses to searches, I've never used AI before, not once. Most people I know, when they hear this, say, "You haven't used AI? But it's so useful!" I disagreed; I'd seen the results Google's AI gave, and it
honestly seemed overhyped
honestly seemed overhyped
.
Read More »
Read More »
I never configure a home firewall without these three rules, and they stop the attacks most people don't know are happening
I never configure a home firewall without these three rules, and they stop the attacks most people don't know are happening
Joe Rice-Jones
By
Joe Rice-Jones
Joe Rice-Jones
Apr 30, 2026
unifi dream machine pro max and in-wall ap
Being connected to the internet has always been slightly dangerous, but in the age of automated scanning and AI, it's never been more so. Network security is something many assume their router is going to handle on its own, if they think about it at all, but the
myth of being too small to be worth targeting
is long over.
Read More »
Read More »
AMD Ryzen 7 7800X3D
AMD Ryzen 7 7800X3D
$325
$449
SAVE 28%
AMD Ryzen 7 7800X3D
AMD Ryzen 7 7800X3D
$325
$449
SAVE 28%
Samsung Galaxy Book5 Pro 360
Samsung Galaxy Book5 Pro 360
$1200
$1600
SAVE 25%
Samsung Galaxy Book5 Pro 360
Samsung Galaxy Book5 Pro 360
$1200
$1600
SAVE 25%
Linux is finally dropping support for ancient hardware, and it's about time
Linux is finally dropping support for ancient hardware, and it's about time
Simon Batt
By
Simon Batt
Simon Batt
Apr 30, 2026
A laptop running KDE Plasma and showing a context menu in the Dolphin file manager
Linux 7.1 has just entered the release candidate phase, and if it proves to be stable enough in the coming weeks, we should see it released fairly soon. The new version removes support for the i486 CPU, which was released in 1989, because it was infeasible to continue maintaining it when nobody was likely still using it.
Read More »
Read More »
Microsoft rolls out Xbox Mode, bringing a console-like experience to any PC
Microsoft rolls out Xbox Mode, bringing a console-like experience to any PC
Patrick O'Rourke
By
Patrick O'Rourke
Patrick O'Rourke
Apr 30, 2026
xbox-mode
Microsoft has rolled out its gaming-focused
Xbox Mode to all Windows 11 PCs and devices
Xbox Mode to all Windows 11 PCs and devices
, including laptops, tablets, handhelds, and more. The console-like overlay aims to simplify gaming on Windows 11 with a stripped-back Xbox-inspired UI that's snappier and more intuitive.
Read More »
Read More »
You are subscribed to XDA newsletters as
[EMAIL]
Click here
Click here
to access unlimited articles and new features by creating or logging into your account.
Manage Email Preferences
Manage Email Preferences
|
Unsubscribe
Unsubscribe
|
Privacy Policy
Privacy Policy
|
Terms of Use
Terms of Use
|
Careers
Careers
|
Contact
Contact
Valnet Inc, 740 Broadway, New York, NY 10003, USA
Reply
Reply
Forward
Forward
You can't react to a group with an emoji
Calendar
Keep
Tasks
Contacts
Get add-ons
Hide side panel...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Home | Hostinger","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home | Hostinger","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nginx Proxy Manager","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nginx Proxy Manager","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Оптичен интернет за дома - EON телевизия | Vivacom | 5G","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Оптичен интернет за дома - EON телевизия | Vivacom | 5G","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"AFFiNE - All In One KnowledgeOS","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AFFiNE - All In One KnowledgeOS","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All docs · AFFiNE","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All docs · AFFiNE","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Sign in","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sign in","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finally making the move to 4K thanks to DLSS 4.5 - kovaliklukas@gmail.com - Gmail","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Finally making the move to 4K thanks to DLSS 4.5 - kovaliklukas@gmail.com - Gmail","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to content","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Using Gmail with screen readers","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Using Gmail with screen readers","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Main menu","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXLink","text":"Gmail","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Search","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search mail","depth":18,"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Advanced search options","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search mail","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Support","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Settings","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ask Gemini","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Google apps","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Google Account: Lukáš Koválik (kovaliklukas@gmail.com)","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Compose","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Labels","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Labels","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Inbox 41 unread","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"41","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Starred","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Starred","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Snoozed","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Snoozed","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Important","depth":17,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Important","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sent","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sent","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Drafts 8 unread","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Drafts","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Purchases has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Purchases","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Social 5200 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Social","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,200","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Updates 8802 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Updates","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8,802","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Forums 6101 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Forums","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6,101","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Promotions 38750 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Promotions","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"38,750","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More labels","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"More","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Labels","depth":11,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Labels","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create new label","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Labels","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Labels","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"[Imap]/Nevyžiadaná pošta has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[Imap]/Nevyžiadaná pošta","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"arch has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"arch","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deleted Items has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deleted Items","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Fibank 1229 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Fibank","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1,229","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"FL 6 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"FL","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Hardware & Software has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hardware & Software","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"HOSTING 5 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"HOSTING","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Infected Items has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Infected Items","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"jiminny-github 7487 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny-github","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7,487","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Junk E-mail 219 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Junk E-mail","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"219","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Kontakty has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Kontakty","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sent Items has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sent Items","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"WORK 848 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"WORK","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"848","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"z centra 1274 unread has menu","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"z centra","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1,274","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More labels","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"More","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Back to Inbox","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Archive","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Report spam","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Delete","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Mark as unread","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Move to","depth":11,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"More email options","depth":11,"on_screen":true,"help_text":"More","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"48","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"of","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21,245","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Newer","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Older","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Input tools on/off (Ctrl-Shift-K)","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Select input tool","depth":11,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Print all","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"In new window","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Finally making the move to 4K thanks to DLSS 4.5","depth":13,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Finally making the move to 4K thanks to DLSS 4.5","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Not important","depth":14,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search for all messages with label Inbox","depth":15,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Remove label Inbox from this conversation","depth":15,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"XDA Verified sender newsletter@xda-developers.com Unsubscribe","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXCell","text":"XDA Verified sender newsletter@xda-developers.com","depth":24,"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"XDA","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Verified sender","depth":25,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"newsletter@xda-developers.com","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Unsubscribe","depth":25,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unsubscribe","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Fri 1 May, 15:05 (7 days ago)","depth":20,"on_screen":true,"help_text":"1 May 2026, 15:05","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fri 1 May, 15:05 (7 days ago)","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Not starred","depth":21,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"You can't react to a group with an emoji","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Reply","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More message options","depth":22,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"to","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"me","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Show details","depth":23,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"XDA Logo","depth":26,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"May 1, 2026","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Welcome to your pre-weekend hit!","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"We're just about to head into the weekend, but before we get prepped for an immersive gaming session across the two-day break, which resolution are you gaming on? 1440p continues to feel the sweet spot for many, and despite having capable hardware, like an RTX 4090, gamers continue to avoid 4K for a couple of reasons.","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DLSS 4.5 is finally starting to make the switch to 4K make more sense, at least for AAA gaming. For starters, the upscaled image almost looks just as good as native 4K, and some might argue it looks slightly better than native with TAA. It's a bit heavier on the GPU than previous versions, but the improvements in motion stability make it worth it. Give it a go this weekend and see how you get on.","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Love XDA? We have so much more!","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Follow us on Google","depth":23,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Follow us on Google","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"I used to prefer gaming at 1440p, but DLSS 4.5 changed that","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I used to prefer gaming at 1440p, but DLSS 4.5 changed that","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Hamlin Rozario","depth":23,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"By","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Hamlin Rozario","depth":23,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hamlin Rozario","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apr 30, 2026","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dell QD-OLED on a desk","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"As a competitive gamer who occasionally plays AAA titles, 1440p has always felt like the sweet spot for me. Despite having an RTX 4090, I couldn't fully move to 4K for a couple of reasons.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read More »","depth":23,"bounds":{"left":0.18611111,"top":0.0,"width":0.15555556,"height":0.053333335},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read More »","depth":24,"bounds":{"left":0.23090278,"top":0.0,"width":0.065972224,"height":0.018333333},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Your GPU upscales way more than just games, and old videos look incredible","depth":23,"bounds":{"left":0.0,"top":0.10388889,"width":0.36805555,"height":0.053333335},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Your GPU upscales way more than just games, and old videos look incredible","depth":24,"bounds":{"left":0.0,"top":0.10555556,"width":0.3625,"height":0.049444444},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Samarveer Singh","depth":23,"bounds":{"left":0.0,"top":0.175,"width":0.027777778,"height":0.047222223},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"By","depth":23,"bounds":{"left":0.008333334,"top":0.18166667,"width":0.013888889,"height":0.016111111},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Samarveer Singh","depth":23,"bounds":{"left":0.022222223,"top":0.18166667,"width":0.07951389,"height":0.016111111},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Samarveer Singh","depth":24,"bounds":{"left":0.022222223,"top":0.18166667,"width":0.07951389,"height":0.016111111},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apr 30, 2026","depth":23,"bounds":{"left":0.008333334,"top":0.19944444,"width":0.055555556,"height":0.016111111},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"nvidia geforce rtx 4070 super founders edition with power socket seen from an angle","depth":23,"bounds":{"left":0.0,"top":0.25777778,"width":0.36805555,"height":0.39277777},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Most of us first noticed GPU upscaling through games because of the cleaner edges, the sharper image quality, and, well, the \"free\" performance. Features like DLSS and FSR have made upscaling feel like magic, powered by dedicated hardware like tensor cores that reconstruct detail faster than brute force rendering ever did.","depth":23,"bounds":{"left":0.0,"top":0.6722222,"width":0.36006945,"height":0.125},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read More »","depth":23,"bounds":{"left":0.18611111,"top":0.8194444,"width":0.15555556,"height":0.053333335},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read More »","depth":24,"bounds":{"left":0.23090278,"top":0.83666664,"width":0.065972224,"height":0.018333333},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Running local AI on the Raspberry Pi 5 taught me why cloud models are still winning","depth":23,"bounds":{"left":0.0,"top":0.97944444,"width":0.36805555,"height":0.020555556},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Running local AI on the Raspberry Pi 5 taught me why cloud models are still winning","depth":24,"bounds":{"left":0.0,"top":0.9811111,"width":0.35729167,"height":0.01888889},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Charles Wolfe","depth":23,"bounds":{"left":0.0,"top":1.0,"width":0.027777778,"height":-0.050555587},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"By","depth":23,"bounds":{"left":0.008333334,"top":1.0,"width":0.013888889,"height":-0.055555582},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Charles Wolfe","depth":23,"bounds":{"left":0.022222223,"top":1.0,"width":0.06493056,"height":-0.055555582},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Charles Wolfe","depth":24,"bounds":{"left":0.022222223,"top":1.0,"width":0.06493056,"height":-0.055555582},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apr 30, 2026","depth":23,"bounds":{"left":0.008333334,"top":1.0,"width":0.055555556,"height":-0.07333338},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"raspberry pi 5.5","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Except for Google's AI responses to searches, I've never used AI before, not once. Most people I know, when they hear this, say, \"You haven't used AI? But it's so useful!\" I disagreed; I'd seen the results Google's AI gave, and it","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"honestly seemed overhyped","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"honestly seemed overhyped","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read More »","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read More »","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"I never configure a home firewall without these three rules, and they stop the attacks most people don't know are happening","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I never configure a home firewall without these three rules, and they stop the attacks most people don't know are happening","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Joe Rice-Jones","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"By","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Joe Rice-Jones","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Joe Rice-Jones","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apr 30, 2026","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"unifi dream machine pro max and in-wall ap","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Being connected to the internet has always been slightly dangerous, but in the age of automated scanning and AI, it's never been more so. Network security is something many assume their router is going to handle on its own, if they think about it at all, but the","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"myth of being too small to be worth targeting","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is long over.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read More »","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read More »","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"AMD Ryzen 7 7800X3D","depth":28,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AMD Ryzen 7 7800X3D","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$325","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$449","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SAVE 28%","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"AMD Ryzen 7 7800X3D","depth":28,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AMD Ryzen 7 7800X3D","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$325","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$449","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SAVE 28%","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Samsung Galaxy Book5 Pro 360","depth":28,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Samsung Galaxy Book5 Pro 360","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$1200","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$1600","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SAVE 25%","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Samsung Galaxy Book5 Pro 360","depth":28,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Samsung Galaxy Book5 Pro 360","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$1200","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$1600","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SAVE 25%","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Linux is finally dropping support for ancient hardware, and it's about time","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Linux is finally dropping support for ancient hardware, and it's about time","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Simon Batt","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"By","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Simon Batt","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Simon Batt","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apr 30, 2026","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"A laptop running KDE Plasma and showing a context menu in the Dolphin file manager","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Linux 7.1 has just entered the release candidate phase, and if it proves to be stable enough in the coming weeks, we should see it released fairly soon. The new version removes support for the i486 CPU, which was released in 1989, because it was infeasible to continue maintaining it when nobody was likely still using it.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read More »","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read More »","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Microsoft rolls out Xbox Mode, bringing a console-like experience to any PC","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Microsoft rolls out Xbox Mode, bringing a console-like experience to any PC","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Patrick O'Rourke","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"By","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Patrick O'Rourke","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Patrick O'Rourke","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apr 30, 2026","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"xbox-mode","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Microsoft has rolled out its gaming-focused","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Xbox Mode to all Windows 11 PCs and devices","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Xbox Mode to all Windows 11 PCs and devices","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", including laptops, tablets, handhelds, and more. The console-like overlay aims to simplify gaming on Windows 11 with a stripped-back Xbox-inspired UI that's snappier and more intuitive.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read More »","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read More »","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You are subscribed to XDA newsletters as","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"kovaliklukas@gmail.com","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Click here","depth":27,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Click here","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to access unlimited articles and new features by creating or logging into your account.","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Manage Email Preferences","depth":26,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Manage Email Preferences","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"|","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Unsubscribe","depth":26,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unsubscribe","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"|","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Privacy Policy","depth":26,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Privacy Policy","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"|","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Terms of Use","depth":26,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Terms of Use","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"|","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Careers","depth":26,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Careers","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"|","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Contact","depth":26,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Contact","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Valnet Inc, 740 Broadway, New York, NY 10003, USA","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reply","depth":14,"bounds":{"left":0.0,"top":0.0,"width":0.072222225,"height":0.04},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reply","depth":15,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.020555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Forward","depth":14,"bounds":{"left":0.0,"top":0.0,"width":0.07777778,"height":0.04},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Forward","depth":15,"bounds":{"left":0.0069444445,"top":0.0,"width":0.0375,"height":0.020555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"You can't react to a group with an emoji","depth":15,"bounds":{"left":0.061805554,"top":0.0,"width":0.025,"height":0.04},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Calendar","depth":10,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Keep","depth":10,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Tasks","depth":10,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Contacts","depth":10,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Get add-ons","depth":10,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Hide side panel","depth":9,"bounds":{"left":0.4409722,"top":0.0,"width":0.03888889,"height":0.062222224},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
8657760664432582001
|
9175684113904599915
|
click
|
accessibility
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
Home | Hostinger
Home | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Оптичен интернет за дома - EON телевизия | Vivacom | 5G
Оптичен интернет за дома - EON телевизия | Vivacom | 5G
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Sign in
Sign in
Finally making the move to 4K thanks to DLSS 4.5 - [EMAIL] - Gmail
Finally making the move to 4K thanks to DLSS 4.5 - [EMAIL] - Gmail
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to content
Skip to content
Using Gmail with screen readers
Using Gmail with screen readers
Main menu
Gmail
Search
Search
Search mail
Advanced search options
Search mail
Support
Settings
Ask Gemini
Google apps
Google Account: Lukáš Koválik ([EMAIL])
Compose
Labels
Labels
Inbox 41 unread
Inbox
41
Starred
Starred
Snoozed
Snoozed
Important
Important
Sent
Sent
Drafts 8 unread
Drafts
8
Purchases has menu
Purchases
Social 5200 unread has menu
Social
5,200
Updates 8802 unread has menu
Updates
8,802
Forums 6101 unread has menu
Forums
6,101
Promotions 38750 unread has menu
Promotions
38,750
More labels
More
Labels
Labels
Create new label
Labels
Labels
[Imap]/Nevyžiadaná pošta has menu
[Imap]/Nevyžiadaná pošta
arch has menu
arch
Deleted Items has menu
Deleted Items
Fibank 1229 unread has menu
Fibank
1,229
FL 6 unread has menu
FL
6
Hardware & Software has menu
Hardware & Software
HOSTING 5 unread has menu
HOSTING
5
Infected Items has menu
Infected Items
jiminny-github 7487 unread has menu
jiminny-github
7,487
Junk E-mail 219 unread has menu
Junk E-mail
219
Kontakty has menu
Kontakty
Sent Items has menu
Sent Items
WORK 848 unread has menu
WORK
848
z centra 1274 unread has menu
z centra
1,274
More labels
More
Back to Inbox
Archive
Report spam
Delete
Mark as unread
Move to
More email options
48
of
21,245
Newer
Older
Input tools on/off (Ctrl-Shift-K)
Select input tool
Print all
In new window
Finally making the move to 4K thanks to DLSS 4.5
Finally making the move to 4K thanks to DLSS 4.5
Not important
Search for all messages with label Inbox
Remove label Inbox from this conversation
XDA Verified sender [EMAIL] Unsubscribe
XDA Verified sender [EMAIL]
XDA
Verified sender
[EMAIL]
Unsubscribe
Unsubscribe
Fri 1 May, 15:05 (7 days ago)
Fri 1 May, 15:05 (7 days ago)
Not starred
You can't react to a group with an emoji
Reply
More message options
to
me
Show details
XDA Logo
May 1, 2026
Welcome to your pre-weekend hit!
We're just about to head into the weekend, but before we get prepped for an immersive gaming session across the two-day break, which resolution are you gaming on? 1440p continues to feel the sweet spot for many, and despite having capable hardware, like an RTX 4090, gamers continue to avoid 4K for a couple of reasons.
DLSS 4.5 is finally starting to make the switch to 4K make more sense, at least for AAA gaming. For starters, the upscaled image almost looks just as good as native 4K, and some might argue it looks slightly better than native with TAA. It's a bit heavier on the GPU than previous versions, but the improvements in motion stability make it worth it. Give it a go this weekend and see how you get on.
Love XDA? We have so much more!
Follow us on Google
Follow us on Google
I used to prefer gaming at 1440p, but DLSS 4.5 changed that
I used to prefer gaming at 1440p, but DLSS 4.5 changed that
Hamlin Rozario
By
Hamlin Rozario
Hamlin Rozario
Apr 30, 2026
Dell QD-OLED on a desk
As a competitive gamer who occasionally plays AAA titles, 1440p has always felt like the sweet spot for me. Despite having an RTX 4090, I couldn't fully move to 4K for a couple of reasons.
Read More »
Read More »
Your GPU upscales way more than just games, and old videos look incredible
Your GPU upscales way more than just games, and old videos look incredible
Samarveer Singh
By
Samarveer Singh
Samarveer Singh
Apr 30, 2026
nvidia geforce rtx 4070 super founders edition with power socket seen from an angle
Most of us first noticed GPU upscaling through games because of the cleaner edges, the sharper image quality, and, well, the "free" performance. Features like DLSS and FSR have made upscaling feel like magic, powered by dedicated hardware like tensor cores that reconstruct detail faster than brute force rendering ever did.
Read More »
Read More »
Running local AI on the Raspberry Pi 5 taught me why cloud models are still winning
Running local AI on the Raspberry Pi 5 taught me why cloud models are still winning
Charles Wolfe
By
Charles Wolfe
Charles Wolfe
Apr 30, 2026
raspberry pi 5.5
Except for Google's AI responses to searches, I've never used AI before, not once. Most people I know, when they hear this, say, "You haven't used AI? But it's so useful!" I disagreed; I'd seen the results Google's AI gave, and it
honestly seemed overhyped
honestly seemed overhyped
.
Read More »
Read More »
I never configure a home firewall without these three rules, and they stop the attacks most people don't know are happening
I never configure a home firewall without these three rules, and they stop the attacks most people don't know are happening
Joe Rice-Jones
By
Joe Rice-Jones
Joe Rice-Jones
Apr 30, 2026
unifi dream machine pro max and in-wall ap
Being connected to the internet has always been slightly dangerous, but in the age of automated scanning and AI, it's never been more so. Network security is something many assume their router is going to handle on its own, if they think about it at all, but the
myth of being too small to be worth targeting
is long over.
Read More »
Read More »
AMD Ryzen 7 7800X3D
AMD Ryzen 7 7800X3D
$325
$449
SAVE 28%
AMD Ryzen 7 7800X3D
AMD Ryzen 7 7800X3D
$325
$449
SAVE 28%
Samsung Galaxy Book5 Pro 360
Samsung Galaxy Book5 Pro 360
$1200
$1600
SAVE 25%
Samsung Galaxy Book5 Pro 360
Samsung Galaxy Book5 Pro 360
$1200
$1600
SAVE 25%
Linux is finally dropping support for ancient hardware, and it's about time
Linux is finally dropping support for ancient hardware, and it's about time
Simon Batt
By
Simon Batt
Simon Batt
Apr 30, 2026
A laptop running KDE Plasma and showing a context menu in the Dolphin file manager
Linux 7.1 has just entered the release candidate phase, and if it proves to be stable enough in the coming weeks, we should see it released fairly soon. The new version removes support for the i486 CPU, which was released in 1989, because it was infeasible to continue maintaining it when nobody was likely still using it.
Read More »
Read More »
Microsoft rolls out Xbox Mode, bringing a console-like experience to any PC
Microsoft rolls out Xbox Mode, bringing a console-like experience to any PC
Patrick O'Rourke
By
Patrick O'Rourke
Patrick O'Rourke
Apr 30, 2026
xbox-mode
Microsoft has rolled out its gaming-focused
Xbox Mode to all Windows 11 PCs and devices
Xbox Mode to all Windows 11 PCs and devices
, including laptops, tablets, handhelds, and more. The console-like overlay aims to simplify gaming on Windows 11 with a stripped-back Xbox-inspired UI that's snappier and more intuitive.
Read More »
Read More »
You are subscribed to XDA newsletters as
[EMAIL]
Click here
Click here
to access unlimited articles and new features by creating or logging into your account.
Manage Email Preferences
Manage Email Preferences
|
Unsubscribe
Unsubscribe
|
Privacy Policy
Privacy Policy
|
Terms of Use
Terms of Use
|
Careers
Careers
|
Contact
Contact
Valnet Inc, 740 Broadway, New York, NY 10003, USA
Reply
Reply
Forward
Forward
You can't react to a group with an emoji
Calendar
Keep
Tasks
Contacts
Get add-ons
Hide side panel...
|
10629
|
NULL
|
NULL
|
NULL
|
|
9341
|
424
|
3
|
2026-05-08T12:42:31.185311+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778244151185_m2.jpg...
|
Firefox
|
Jy 20820 es reindex stream model hydration by Vasi Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app — Work...
|
True
|
github.com/jiminny/app/pull/12059/changes#diff-f77 github.com/jiminny/app/pull/12059/changes#diff-f77c5793308caa3e764a033422493121a1329dd953a89f3dde4a9386622f22f9...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 3 Q2 - Platform Team - Scrum Board Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Unnamed Group
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -5,69 +5,64 @@5namespace Jiminny\Component\ES\Processor\Actions;5namespace Jiminny\Component\ES\Processor\Actions;667use Elastica\Document;7use Elastica\Document;8-use Illuminate\Support\Collection;9use Jiminny\Component\ElasticSearch\Contract\Searchable;8use Jiminny\Component\ElasticSearch\Contract\Searchable;10use Jiminny\Component\ES\Processor\DTOs\DocumentLoad;9use Jiminny\Component\ES\Processor\DTOs\DocumentLoad;11use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;10use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;12use Jiminny\Component\ES\Processor\EntityQueryBuilder;11use Jiminny\Component\ES\Processor\EntityQueryBuilder;13-use Jiminny\Component\ES\Processor\Traits\SkipActivityTrait;14use Jiminny\Exceptions\SyncActivityException;12use Jiminny\Exceptions\SyncActivityException;15use Jiminny\Models\Model;13use Jiminny\Models\Model;16use Sentry\Laravel\Facade as Sentry;14use Sentry\Laravel\Facade as Sentry;15+use Throwable;171618class LoadDocumentsAction17class LoadDocumentsAction19{18{20-use SkipActivityTrait;19+public function __construct(21-20+private readonly EntityQueryBuilder $queryBuilder22-private const int RDS_CHUNK_SIZE = 250;21+ ) {22+ }232324-/**25- * @codeCoverageIgnore26- */27public function loadDocuments(string $updateTarget, array $entityIdsList): DocumentLoad24public function loadDocuments(string $updateTarget, array $entityIdsList): DocumentLoad28 {25 {29$documentsToUpdate = new SimpleCollection();26$documentsToUpdate = new SimpleCollection();30$documentsToDelete = new SimpleCollection();27$documentsToDelete = new SimpleCollection();312832-// do get mariadb data29+$query = $this->queryBuilder->getEntityQuery($updateTarget, $entityIdsList);33-$query = EntityQueryBuilder::getEntityQuery($updateTarget, $entityIdsList);343035-$query->chunkByIdDesc(31+/** @var Model&Searchable $entityModel */36-self::RDS_CHUNK_SIZE,32+foreach ($query->cursor() as $entityModel) {37-function (Collection $entityModels) use ($documentsToUpdate, $documentsToDelete) {33+if ($entityModel->isDeleted()) {38-/** @var Model&Searchable $entityForDeletion */34+/**39-foreach ($entityModels->whereNotNull('deleted_at') as $entityForDeletion) {35+ * Cleanup (from ElasticSearch) scheduled entities that were recently deleted.40-$documentsToDelete->add($entityForDeletion->getId());36+ * After a deletion, no more updates on a record are expected, so the operation is considered final,41- }37+ * unless the record is restored.42-38+ */43-/** @var Model&Searchable $entityModel */39+$documentsToDelete->add($entityModel->getId());44-foreach ($entityModels->whereNull('deleted_at') as $entityModel) {40+ } else {45-if (self::shouldSkipActivity($entityModel)) {41+try {46-/**42+$documentsToUpdate->add(47- * If the activity type is in the skip list, we should not push it for indexing.43+new Document((string) $entityModel->getId(), $entityModel->getIndexableAttributes())48- * If an ES record already exists, we should remove it to free up storage and processing power44+ );49- */45+ } catch (Throwable $error) {50-$documentsToDelete->add($entityModel->getId());46+ Sentry::captureException(51-47+new SyncActivityException(52-continue;48+'ES entity async RDS build data failed',53- }49+$error->getCode(),54-50+$error55-try {51+ )56-$documentsToUpdate->add(52+ );57-new Document((string) $entityModel->getId(), $entityModel->getIndexableAttributes())58- );59- } catch (\Throwable $error) {60- Sentry::captureException(61-new SyncActivityException(62-'ES entity async RDS build data failed',63-$error->getCode(),64-$error65- )66- );67- }68 }53 }69 }54 }70- );55+56+/**57+ * Clean up fragmented memory.58+ * Dropping relations and unsetting the entity model after hydration and usage,59+ * allows GC to remove heap memory allocations, and recycle already allocated memory,60+ * instead of allocating more memory from OS.61+ * Unset operations signal GC to collect destroyed object memory62+ */63+$entityModel->setRelations([]);64+ unset($entityModel);65+ }716672return new DocumentLoad($documentsToUpdate, $documentsToDelete);67return new DocumentLoad($documentsToUpdate, $documentsToDelete);73 }68 }</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 20820 es reindex stream model hydration by Vasi</tabTitle>” with “<selection>@@ -5,69 +5,64 @@5namespace Jiminny\Component\ES\Processor\Actions;5namespace Jiminny\Component\ES\Processor\Actions;667use Elastica\Document;7use Elastica\Document;8-use Illuminate\Support\Collection;9use Jiminny\Component\ElasticSearch\Contract\Searchable;8use Jiminny\Component\ElasticSearch\Contract\Searchable;10use Jiminny\Component\ES\Processor\DTOs\DocumentLoad;9use Jiminny\Component\ES\Processor\DTOs\DocumentLoad;11use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;10use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;12use Jiminny\Component\ES\Processor\EntityQueryBuilder;11use Jiminny\Component\ES\Processor\EntityQueryBuilder;13-use Jiminny\Component\ES\Processor\Traits\SkipActivityTrait;14use Jiminny\Exceptions\SyncActivityException;12use Jiminny\Exceptions\SyncActivityException;15use Jiminny\Models\Model;13use Jiminny\Models\Model;16use Sentry\Laravel\Facade as Sentry;14use Sentry\Laravel\Facade as Sentry;15+use Throwable;171618class LoadDocumentsAction17class LoadDocumentsAction19{18{20-use SkipActivityTrait;19+public function __construct(21-20+private readonly EntityQueryBuilder $queryBuilder22-private const int RDS_CHUNK_SIZE = 250;21+ ) {22+ }232324-/**25- * @codeCoverageIgnore26- */27public function loadDocuments(string $updateTarget, array $entityIdsList): DocumentLoad24public function loadDocuments(string $updateTarget, array $entityIdsList): DocumentLoad28 {25 {29$documentsToUpdate = new SimpleCollection();26$documentsToUpdate = new SimpleCollection();30$documentsToDelete = new SimpleCollection();27$documentsToDelete = new SimpleCollection();312832-// do get mariadb data29+$query = $this->queryBuilder->getEntityQuery($updateTarget, $entityIdsList);33-$query = EntityQueryBuilder::getEntityQuery($updateTarget, $entityIdsList);343035-$query->chunkByIdDesc(31+/** @var Model&Searchable $entityModel */36-self::RDS_CHUNK_SIZE,32+foreach ($query->cursor() as $entityModel) {37-function (Collection $entityModels) use ($documentsToUpdate, $documentsToDelete) {33+if ($entityModel->isDeleted()) {38-/** @var Model&Searchable $entityForDeletion */34+/**39-foreach ($entityModels->whereNotNull('deleted_at') as $entityForDeletion) {35+ * Cleanup (from ElasticSearch) scheduled entities that were recently deleted.40-$documentsToDelete->add($entityForDeletion->getId());36+ * After a deletion, no more updates on a record are expected, so the operation is considered final,41- }37+ * unless the record is restored.42-38+ */43-/** @var Model&Searchable $entityModel */39+$documentsToDelete->add($entityModel->getId());44-foreach ($entityModels->whereNull('deleted_at') as $entityModel) {40+ } else {45-if (self::shouldSkipActivity($entityModel)) {41+try {46-/**42+$documentsToUpdate->add(47- * If the activity type is in the skip list, we should not push it for indexing.43+new Document((string) $entityModel->getId(), $entityModel->getIndexableAttributes())48- * If an ES record already exists, we should remove it to free up storage and processing power44+ );49- */45+ } catch (Throwable $error) {50-$documentsToDelete->add($entityModel->getId());46+ Sentry::captureException(51-47+new SyncActivityException(52-continue;48+'ES entity async RDS build data failed',53- }49+$error->getCode(),54-50+$error55-try {51+ )56-$documentsToUpdate->add(52+ );57-new Document((string) $entityModel->getId(), $entityModel->getIndexableAttributes())58- );59- } catch (\Throwable $error) {60- Sentry::captureException(61-new SyncActivityException(62-'ES entity async RDS build data failed',63-$error->getCode(),64-$error65- )66- );67- }68 }53 }69 }54 }70- );55+56+/**57+ * Clean up fragmented memory.58+ * Dropping relations and unsetting the entity model after hydration and usage,59+ * allows GC to remove heap memory allocations, and recycle already allocated memory,60+ * instead of allocating more memory from OS.61+ * Unset operations signal GC to collect destroyed object memory62+ */63+$entityModel->setRelations([]);64+ unset($entityModel);65+ }716672return new DocumentLoad($documentsToUpdate, $documentsToDelete);67return new DocumentLoad($documentsToUpdate, $documentsToDelete);73 }68 }</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
Gemini said
Gemini said
Enter a prompt for Gemini
encrypted
Enter a prompt for Gemini
encrypted
Open upload file menu
Tools
Open mode picker
Pro
Stop response
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Gemini replied
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (33)
Pull requests
(
33
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (2)
Security and quality
(
2
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
Jy 20820 es reindex stream model hydration #12059 Edit title
Jy 20820 es reindex stream model hydration
#
12059
Edit title
Preview
Preview
Awaiting approval
Awaiting approval
Code
Code
Open
Vasil-Jiminny
Vasil-Jiminny
wants to merge 35 commits into
master
master
from
JY-20820-es-reindex-stream-model-hydration
JY-20820-es-reindex-stream-model-hydration
Copy head branch name to clipboard
Lines changed: 363 additions & 140 deletions
Conversation (8)
Conversation
(
8
)
Commits (35)
Commits
(
35
)
Checks (3)
Checks
(
3
)
Files changed (12)
Files changed
(
12
)
Pull Request Toolbar
Pull Request Toolbar
Collapse file tree
All commits
All commits
0 of 12 files viewed
Submit review
Submit
review
Open diff view settings
Open overview panel
Open comments panel
(
0
)
Filter files…
Filter options
File tree
File tree
app
Component
ElasticSearch/Contract
Searchable.php
Searchable.php
ES
Processor
Actions
LoadDocumentsAction.php
Traits
SkipActivityTrait.php
EntityQueryBuilder.php
EntityQueryBuilder.php
Repositories...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.2237367,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.23703457,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unnamed Group","depth":4,"bounds":{"left":0.2265625,"top":0.08978452,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"bounds":{"left":0.2265625,"top":0.11332801,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"bounds":{"left":0.23969415,"top":0.1245012,"width":0.4644282,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"bounds":{"left":0.2265625,"top":0.14604948,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"bounds":{"left":0.23969415,"top":0.15722266,"width":0.4644282,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.2237367,"top":0.17877094,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.23703457,"top":0.18994413,"width":0.10721409,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app","depth":4,"bounds":{"left":0.2237367,"top":0.21149242,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20807 check various issues with stages by nikolaybiaivanov · Pull Request #12041 · jiminny/app","depth":5,"bounds":{"left":0.23703457,"top":0.22266561,"width":0.17037898,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"bounds":{"left":0.2237367,"top":0.2442139,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"bounds":{"left":0.23703457,"top":0.25538707,"width":0.042719416,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app","depth":4,"bounds":{"left":0.2237367,"top":0.27693537,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20818 move ask jiminny reports to its own datadog metric by LakyLak · Pull Request #12056 · jiminny/app","depth":5,"bounds":{"left":0.23703457,"top":0.28810853,"width":0.18899602,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Userpilot | Ask Jiminny Report Generated","depth":4,"bounds":{"left":0.2237367,"top":0.30965683,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Userpilot | Ask Jiminny Report Generated","depth":5,"bounds":{"left":0.23703457,"top":0.32083002,"width":0.07164229,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":4,"bounds":{"left":0.2237367,"top":0.3423783,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":5,"bounds":{"left":0.23703457,"top":0.35355148,"width":0.19331782,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Problem loading page","depth":4,"bounds":{"left":0.2237367,"top":0.37509975,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Problem loading page","depth":5,"bounds":{"left":0.23703457,"top":0.38627294,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Search the CRM - HubSpot docs","depth":4,"bounds":{"left":0.2237367,"top":0.40782124,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search the CRM - HubSpot docs","depth":5,"bounds":{"left":0.23703457,"top":0.41899443,"width":0.05651596,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.2237367,"top":0.4405427,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.23703457,"top":0.4517159,"width":0.013131649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.2237367,"top":0.47326416,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.23703457,"top":0.48443735,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.2237367,"top":0.5059856,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.23703457,"top":0.5171588,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"AI Features | Datadog","depth":4,"bounds":{"left":0.2237367,"top":0.5387071,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AI Features | Datadog","depth":5,"bounds":{"left":0.23703457,"top":0.54988027,"width":0.037400264,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20493 smart instant nudge pre filtering by nikolaybiaivanov · Pull Request #12053 · jiminny/app","depth":4,"bounds":{"left":0.2237367,"top":0.5714286,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20493 smart instant nudge pre filtering by nikolaybiaivanov · Pull Request #12053 · jiminny/app","depth":5,"bounds":{"left":0.23703457,"top":0.5826017,"width":0.17037898,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.2237367,"top":0.60415006,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.23703457,"top":0.61532325,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"bounds":{"left":0.2237367,"top":0.6368715,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":5,"bounds":{"left":0.23703457,"top":0.6480447,"width":0.16888298,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.29105717,"top":0.6440543,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.2265625,"top":0.6711891,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.2265625,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.23753324,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.2486702,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.25980717,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.27094415,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"bounds":{"left":0.4084109,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"bounds":{"left":0.42037898,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.41771942,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"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.3073471,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Chat","depth":12,"bounds":{"left":0.38979387,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"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.40309176,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"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.30302528,"top":0.14764565,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.30302528,"top":0.15003991,"width":0.1200133,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"bounds":{"left":0.3259641,"top":0.18355946,"width":0.013297873,"height":0.031923383},"on_screen":true,"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.34059176,"top":0.18355946,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>Jy 20820 es reindex stream model hydration by Vasi</tabTitle>” with “<selection>@@ -5,69 +5,64 @@5namespace Jiminny\\Component\\ES\\Processor\\Actions;5namespace Jiminny\\Component\\ES\\Processor\\Actions;667use Elastica\\Document;7use Elastica\\Document;8-use Illuminate\\Support\\Collection;9use Jiminny\\Component\\ElasticSearch\\Contract\\Searchable;8use Jiminny\\Component\\ElasticSearch\\Contract\\Searchable;10use Jiminny\\Component\\ES\\Processor\\DTOs\\DocumentLoad;9use Jiminny\\Component\\ES\\Processor\\DTOs\\DocumentLoad;11use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;10use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;12use Jiminny\\Component\\ES\\Processor\\EntityQueryBuilder;11use Jiminny\\Component\\ES\\Processor\\EntityQueryBuilder;13-use Jiminny\\Component\\ES\\Processor\\Traits\\SkipActivityTrait;14use Jiminny\\Exceptions\\SyncActivityException;12use Jiminny\\Exceptions\\SyncActivityException;15use Jiminny\\Models\\Model;13use Jiminny\\Models\\Model;16use Sentry\\Laravel\\Facade as Sentry;14use Sentry\\Laravel\\Facade as Sentry;15+use Throwable;171618class LoadDocumentsAction17class LoadDocumentsAction19{18{20-use SkipActivityTrait;19+public function __construct(21-20+private readonly EntityQueryBuilder $queryBuilder22-private const int RDS_CHUNK_SIZE = 250;21+ ) {22+ }232324-/**25- * @codeCoverageIgnore26- */27public function loadDocuments(string $updateTarget, array $entityIdsList): DocumentLoad24public function loadDocuments(string $updateTarget, array $entityIdsList): DocumentLoad28 {25 {29$documentsToUpdate = new SimpleCollection();26$documentsToUpdate = new SimpleCollection();30$documentsToDelete = new SimpleCollection();27$documentsToDelete = new SimpleCollection();312832-// do get mariadb data29+$query = $this->queryBuilder->getEntityQuery($updateTarget, $entityIdsList);33-$query = EntityQueryBuilder::getEntityQuery($updateTarget, $entityIdsList);343035-$query->chunkByIdDesc(31+/** @var Model&Searchable $entityModel */36-self::RDS_CHUNK_SIZE,32+foreach ($query->cursor() as $entityModel) {37-function (Collection $entityModels) use ($documentsToUpdate, $documentsToDelete) {33+if ($entityModel->isDeleted()) {38-/** @var Model&Searchable $entityForDeletion */34+/**39-foreach ($entityModels->whereNotNull('deleted_at') as $entityForDeletion) {35+ * Cleanup (from ElasticSearch) scheduled entities that were recently deleted.40-$documentsToDelete->add($entityForDeletion->getId());36+ * After a deletion, no more updates on a record are expected, so the operation is considered final,41- }37+ * unless the record is restored.42-38+ */43-/** @var Model&Searchable $entityModel */39+$documentsToDelete->add($entityModel->getId());44-foreach ($entityModels->whereNull('deleted_at') as $entityModel) {40+ } else {45-if (self::shouldSkipActivity($entityModel)) {41+try {46-/**42+$documentsToUpdate->add(47- * If the activity type is in the skip list, we should not push it for indexing.43+new Document((string) $entityModel->getId(), $entityModel->getIndexableAttributes())48- * If an ES record already exists, we should remove it to free up storage and processing power44+ );49- */45+ } catch (Throwable $error) {50-$documentsToDelete->add($entityModel->getId());46+ Sentry::captureException(51-47+new SyncActivityException(52-continue;48+'ES entity async RDS build data failed',53- }49+$error->getCode(),54-50+$error55-try {51+ )56-$documentsToUpdate->add(52+ );57-new Document((string) $entityModel->getId(), $entityModel->getIndexableAttributes())58- );59- } catch (\\Throwable $error) {60- Sentry::captureException(61-new SyncActivityException(62-'ES entity async RDS build data failed',63-$error->getCode(),64-$error65- )66- );67- }68 }53 }69 }54 }70- );55+56+/**57+ * Clean up fragmented memory.58+ * Dropping relations and unsetting the entity model after hydration and usage,59+ * allows GC to remove heap memory allocations, and recycle already allocated memory,60+ * instead of allocating more memory from OS.61+ * Unset operations signal GC to collect destroyed object memory62+ */63+$entityModel->setRelations([]);64+ unset($entityModel);65+ }716672return new DocumentLoad($documentsToUpdate, $documentsToDelete);67return new DocumentLoad($documentsToUpdate, $documentsToDelete);73 }68 }</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,"bounds":{"left":0.36053857,"top":0.19313647,"width":0.051861703,"height":0.09577015},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"bounds":{"left":0.30302528,"top":0.19393456,"width":0.019946808,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>Jy 20820 es reindex stream model hydration by Vasi</tabTitle>” with “<selection>@@ -5,69 +5,64 @@5namespace Jiminny\\Component\\ES\\Processor\\Actions;5namespace Jiminny\\Component\\ES\\Processor\\Actions;667use Elastica\\Document;7use Elastica\\Document;8-use Illuminate\\Support\\Collection;9use Jiminny\\Component\\ElasticSearch\\Contract\\Searchable;8use Jiminny\\Component\\ElasticSearch\\Contract\\Searchable;10use Jiminny\\Component\\ES\\Processor\\DTOs\\DocumentLoad;9use Jiminny\\Component\\ES\\Processor\\DTOs\\DocumentLoad;11use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;10use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;12use Jiminny\\Component\\ES\\Processor\\EntityQueryBuilder;11use Jiminny\\Component\\ES\\Processor\\EntityQueryBuilder;13-use Jiminny\\Component\\ES\\Processor\\Traits\\SkipActivityTrait;14use Jiminny\\Exceptions\\SyncActivityException;12use Jiminny\\Exceptions\\SyncActivityException;15use Jiminny\\Models\\Model;13use Jiminny\\Models\\Model;16use Sentry\\Laravel\\Facade as Sentry;14use Sentry\\Laravel\\Facade as Sentry;15+use Throwable;171618class LoadDocumentsAction17class LoadDocumentsAction19{18{20-use SkipActivityTrait;19+public function __construct(21-20+private readonly EntityQueryBuilder $queryBuilder22-private const int RDS_CHUNK_SIZE = 250;21+ ) {22+ }232324-/**25- * @codeCoverageIgnore26- */27public function loadDocuments(string $updateTarget, array $entityIdsList): DocumentLoad24public function loadDocuments(string $updateTarget, array $entityIdsList): DocumentLoad28 {25 {29$documentsToUpdate = new SimpleCollection();26$documentsToUpdate = new SimpleCollection();30$documentsToDelete = new SimpleCollection();27$documentsToDelete = new SimpleCollection();312832-// do get mariadb data29+$query = $this->queryBuilder->getEntityQuery($updateTarget, $entityIdsList);33-$query = EntityQueryBuilder::getEntityQuery($updateTarget, $entityIdsList);343035-$query->chunkByIdDesc(31+/** @var Model&Searchable $entityModel */36-self::RDS_CHUNK_SIZE,32+foreach ($query->cursor() as $entityModel) {37-function (Collection $entityModels) use ($documentsToUpdate, $documentsToDelete) {33+if ($entityModel->isDeleted()) {38-/** @var Model&Searchable $entityForDeletion */34+/**39-foreach ($entityModels->whereNotNull('deleted_at') as $entityForDeletion) {35+ * Cleanup (from ElasticSearch) scheduled entities that were recently deleted.40-$documentsToDelete->add($entityForDeletion->getId());36+ * After a deletion, no more updates on a record are expected, so the operation is considered final,41- }37+ * unless the record is restored.42-38+ */43-/** @var Model&Searchable $entityModel */39+$documentsToDelete->add($entityModel->getId());44-foreach ($entityModels->whereNull('deleted_at') as $entityModel) {40+ } else {45-if (self::shouldSkipActivity($entityModel)) {41+try {46-/**42+$documentsToUpdate->add(47- * If the activity type is in the skip list, we should not push it for indexing.43+new Document((string) $entityModel->getId(), $entityModel->getIndexableAttributes())48- * If an ES record already exists, we should remove it to free up storage and processing power44+ );49- */45+ } catch (Throwable $error) {50-$documentsToDelete->add($entityModel->getId());46+ Sentry::captureException(51-47+new SyncActivityException(52-continue;48+'ES entity async RDS build data failed',53- }49+$error->getCode(),54-50+$error55-try {51+ )56-$documentsToUpdate->add(52+ );57-new Document((string) $entityModel->getId(), $entityModel->getIndexableAttributes())58- );59- } catch (\\Throwable $error) {60- Sentry::captureException(61-new SyncActivityException(62-'ES entity async RDS build data failed',63-$error->getCode(),64-$error65- )66- );67- }68 }53 }69 }54 }70- );55+56+/**57+ * Clean up fragmented memory.58+ * Dropping relations and unsetting the entity model after hydration and usage,59+ * allows GC to remove heap memory allocations, and recycle already allocated memory,60+ * instead of allocating more memory from OS.61+ * Unset operations signal GC to collect destroyed object memory62+ */63+$entityModel->setRelations([]);64+ unset($entityModel);65+ }716672return new DocumentLoad($documentsToUpdate, $documentsToDelete);67return new DocumentLoad($documentsToUpdate, $documentsToDelete);73 }68 }</selection>” selected.","depth":23,"bounds":{"left":0.36053857,"top":0.19473264,"width":0.051861703,"height":0.80526733},"on_screen":true,"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,"bounds":{"left":0.36053857,"top":0.30965683,"width":0.05119681,"height":0.188747},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"bounds":{"left":0.41240028,"top":0.19313647,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"bounds":{"left":0.30834442,"top":0.3519553,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"bounds":{"left":0.30834442,"top":0.35395053,"width":0.04105718,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextArea","text":"Enter a prompt for Gemini\nencrypted","depth":20,"bounds":{"left":0.31665558,"top":0.8216281,"width":0.10638298,"height":0.01915403},"on_screen":true,"value":"Enter a prompt for Gemini\nencrypted","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"Enter a prompt for Gemini","depth":21,"bounds":{"left":0.32330453,"top":0.82202715,"width":0.069980055,"height":0.018355945},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"encrypted","depth":21,"bounds":{"left":0.31565824,"top":0.8216281,"width":0.0066489363,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open upload file menu","depth":20,"bounds":{"left":0.31266624,"top":0.8575419,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tools","depth":18,"bounds":{"left":0.32862368,"top":0.8575419,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open mode picker","depth":20,"bounds":{"left":0.3856383,"top":0.85514766,"width":0.026097074,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pro","depth":23,"bounds":{"left":0.39095744,"top":0.8639266,"width":0.007480053,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Stop response","depth":19,"bounds":{"left":0.41306517,"top":0.85434955,"width":0.013962766,"height":0.033519555},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":17,"bounds":{"left":0.30884308,"top":0.90901834,"width":0.11951463,"height":0.025139665},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":17,"bounds":{"left":0.39079124,"top":0.92178774,"width":0.040059842,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":18,"bounds":{"left":0.39079124,"top":0.92178774,"width":0.040059842,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":19,"bounds":{"left":0.30302528,"top":0.92098963,"width":0.043218084,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini replied","depth":9,"bounds":{"left":0.30302528,"top":0.091380686,"width":0.032081116,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.30867687,"top":0.95730245,"width":0.053523935,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.31432846,"top":0.96249,"width":0.042220745,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to content","depth":7,"bounds":{"left":0.43916222,"top":0.0,"width":0.0003324468,"height":0.0007980846},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":8,"bounds":{"left":0.43916222,"top":0.0,"width":0.0029920214,"height":0.21468475},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":11,"bounds":{"left":0.44448137,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":10,"bounds":{"left":0.45910904,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":13,"bounds":{"left":0.47240692,"top":0.0,"width":0.018949468,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":15,"bounds":{"left":0.4744016,"top":0.0,"width":0.014960106,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":13,"bounds":{"left":0.49634308,"top":0.0,"width":0.017785905,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":15,"bounds":{"left":0.49833778,"top":0.0,"width":0.008477394,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":10,"bounds":{"left":0.8171542,"top":0.0,"width":0.06565824,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":13,"bounds":{"left":0.8294548,"top":0.0,"width":0.011801862,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":13,"bounds":{"left":0.84258646,"top":0.0,"width":0.002493351,"height":0.011572227},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":13,"bounds":{"left":0.8465758,"top":0.0,"width":0.021276595,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":11,"bounds":{"left":0.88480717,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":10,"bounds":{"left":0.89511305,"top":0.0,"width":0.008643617,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":10,"bounds":{"left":0.91173536,"top":0.0,"width":0.01662234,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":10,"bounds":{"left":0.9310173,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":10,"bounds":{"left":0.94431514,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":10,"bounds":{"left":0.95761305,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"You have unread notifications(g then n)","depth":10,"bounds":{"left":0.9709109,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open user navigation menu","depth":10,"bounds":{"left":0.98420876,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":10,"bounds":{"left":0.43882978,"top":0.0,"width":0.0003324468,"height":0.0007980846},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":11,"bounds":{"left":0.43882978,"top":0.0,"width":0.0787899,"height":0.023144454},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":13,"bounds":{"left":0.44448137,"top":0.0,"width":0.025099734,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":15,"bounds":{"left":0.4552859,"top":0.0,"width":0.011469414,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (33)","depth":13,"bounds":{"left":0.4722407,"top":0.0,"width":0.05518617,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests","depth":15,"bounds":{"left":0.48287898,"top":0.0,"width":0.02925532,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":15,"bounds":{"left":0.5147939,"top":0.0,"width":0.0029920214,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"33","depth":15,"bounds":{"left":0.5177859,"top":0.0,"width":0.005817819,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":15,"bounds":{"left":0.52360374,"top":0.0,"width":0.0016622341,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":13,"bounds":{"left":0.53008646,"top":0.0,"width":0.029089095,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Agents","depth":15,"bounds":{"left":0.54105717,"top":0.0,"width":0.014960106,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":13,"bounds":{"left":0.5618351,"top":0.0,"width":0.03025266,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":15,"bounds":{"left":0.5728058,"top":0.0,"width":0.016123671,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":13,"bounds":{"left":0.59474736,"top":0.0,"width":0.022938829,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":15,"bounds":{"left":0.60555184,"top":0.0,"width":0.009142287,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security and quality (2)","depth":13,"bounds":{"left":0.6203458,"top":0.0,"width":0.06798537,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security and quality","depth":15,"bounds":{"left":0.6321476,"top":0.0,"width":0.04255319,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":15,"bounds":{"left":0.67852396,"top":0.0,"width":0.0029920214,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":15,"bounds":{"left":0.68151593,"top":0.0,"width":0.0026595744,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":15,"bounds":{"left":0.68417555,"top":0.0,"width":0.0018284575,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":13,"bounds":{"left":0.6909907,"top":0.0,"width":0.031083776,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":15,"bounds":{"left":0.70212764,"top":0.0,"width":0.016788565,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":13,"bounds":{"left":0.72473407,"top":0.0,"width":0.032081116,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":15,"bounds":{"left":0.73603725,"top":0.0,"width":0.01761968,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Important update","depth":11,"bounds":{"left":0.45279256,"top":0.0023942539,"width":0.0003324468,"height":0.016759777},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Important update","depth":12,"bounds":{"left":0.45279256,"top":0.003990423,"width":0.039228722,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.","depth":11,"bounds":{"left":0.45279256,"top":0.003990423,"width":0.2159242,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Review this update","depth":11,"bounds":{"left":0.6687167,"top":0.003990423,"width":0.04055851,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Review this update","depth":12,"bounds":{"left":0.6687167,"top":0.003990423,"width":0.04055851,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and manage your preferences in your","depth":11,"bounds":{"left":0.70927525,"top":0.003990423,"width":0.08261303,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GitHub account settings","depth":11,"bounds":{"left":0.7918883,"top":0.003990423,"width":0.05219415,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub account settings","depth":12,"bounds":{"left":0.7918883,"top":0.003990423,"width":0.05219415,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":11,"bounds":{"left":0.8440825,"top":0.003990423,"width":0.0013297872,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dismiss banner","depth":10,"bounds":{"left":0.9865359,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Jy 20820 es reindex stream model hydration #12059 Edit title","depth":13,"bounds":{"left":0.44980052,"top":0.050678372,"width":0.25382313,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jy 20820 es reindex stream model hydration","depth":14,"bounds":{"left":0.44980052,"top":0.051476456,"width":0.20246011,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":15,"bounds":{"left":0.6549202,"top":0.051476456,"width":0.0066489363,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12059","depth":15,"bounds":{"left":0.6615692,"top":0.051476456,"width":0.030086435,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit title","depth":14,"bounds":{"left":0.69298536,"top":0.05387071,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Preview","depth":13,"bounds":{"left":0.9584442,"top":0.05865922,"width":0.031083776,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preview","depth":15,"bounds":{"left":0.9637633,"top":0.06344773,"width":0.01512633,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Awaiting approval","depth":13,"bounds":{"left":0.86818486,"top":0.057063047,"width":0.055352394,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Awaiting approval","depth":15,"bounds":{"left":0.88048536,"top":0.06304868,"width":0.03873005,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Code","depth":13,"bounds":{"left":0.9261968,"top":0.057063047,"width":0.02825798,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":15,"bounds":{"left":0.9305186,"top":0.06304868,"width":0.011635638,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":13,"bounds":{"left":0.46043882,"top":0.09497207,"width":0.011968086,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Vasil-Jiminny","depth":15,"bounds":{"left":0.47905585,"top":0.09177973,"width":0.03025266,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vasil-Jiminny","depth":16,"bounds":{"left":0.47905585,"top":0.0933759,"width":0.03025266,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 35 commits into","depth":15,"bounds":{"left":0.5106383,"top":0.0933759,"width":0.06931516,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":15,"bounds":{"left":0.5812833,"top":0.091380686,"width":0.018284574,"height":0.017557861},"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":16,"bounds":{"left":0.58327794,"top":0.09457303,"width":0.014295213,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":16,"bounds":{"left":0.6008976,"top":0.0933759,"width":0.009973404,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20820-es-reindex-stream-model-hydration","depth":16,"bounds":{"left":0.6122008,"top":0.091380686,"width":0.10488697,"height":0.017557861},"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20820-es-reindex-stream-model-hydration","depth":17,"bounds":{"left":0.61419547,"top":0.09457303,"width":0.1008976,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":16,"bounds":{"left":0.7184175,"top":0.088986434,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 363 additions & 140 deletions","depth":14,"bounds":{"left":0.95212764,"top":0.1452514,"width":0.019946808,"height":0.11412609},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Conversation (8)","depth":16,"bounds":{"left":0.44980052,"top":0.1272945,"width":0.054853722,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Conversation","depth":17,"bounds":{"left":0.46210107,"top":0.1368715,"width":0.02825798,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.5003325,"top":0.1368715,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8","depth":18,"bounds":{"left":0.50332445,"top":0.1368715,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.5063165,"top":0.1368715,"width":0.0016622341,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Commits (35)","depth":16,"bounds":{"left":0.5046542,"top":0.1272945,"width":0.048204787,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Commits","depth":17,"bounds":{"left":0.5169548,"top":0.1368715,"width":0.019115692,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.54853725,"top":0.1368715,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"35","depth":18,"bounds":{"left":0.5515292,"top":0.1368715,"width":0.0056515955,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.5571808,"top":0.1368715,"width":0.0018284575,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Checks (3)","depth":16,"bounds":{"left":0.55285907,"top":0.1272945,"width":0.042386968,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks","depth":17,"bounds":{"left":0.56515956,"top":0.1368715,"width":0.015957447,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.5909242,"top":0.1368715,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":18,"bounds":{"left":0.59391624,"top":0.1368715,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.5969083,"top":0.1368715,"width":0.0016622341,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Files changed (12)","depth":16,"bounds":{"left":0.595246,"top":0.1272945,"width":0.058344416,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Files changed","depth":17,"bounds":{"left":0.60754657,"top":0.1368715,"width":0.029920213,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.6492686,"top":0.1368715,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12","depth":18,"bounds":{"left":0.65226066,"top":0.1368715,"width":0.0048204786,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.6570811,"top":0.1368715,"width":0.0016622341,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Pull Request Toolbar","depth":14,"bounds":{"left":0.44980052,"top":0.18236233,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pull Request Toolbar","depth":15,"bounds":{"left":0.44980052,"top":0.18515563,"width":0.030086435,"height":0.08060654},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse file tree","depth":14,"bounds":{"left":0.44980052,"top":0.17158818,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"All commits","depth":14,"bounds":{"left":0.46176863,"top":0.17158818,"width":0.040392287,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All commits","depth":16,"bounds":{"left":0.4714096,"top":0.17677574,"width":0.02244016,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0 of 12 files viewed","depth":15,"bounds":{"left":0.86319816,"top":0.1839585,"width":0.014960106,"height":0.08060654},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Submit review","depth":14,"bounds":{"left":0.9027593,"top":0.17158818,"width":0.03856383,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Submit","depth":16,"bounds":{"left":0.90575135,"top":0.17677574,"width":0.014793883,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"review","depth":16,"bounds":{"left":0.9205452,"top":0.17677574,"width":0.012466756,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Open diff view settings","depth":14,"bounds":{"left":0.9439827,"top":0.17158818,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open overview panel","depth":14,"bounds":{"left":0.9616024,"top":0.17158818,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open comments panel","depth":14,"bounds":{"left":0.9722407,"top":0.17158818,"width":0.017287234,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"(","depth":16,"bounds":{"left":0.98055184,"top":0.17677574,"width":0.0026595744,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":16,"bounds":{"left":0.98321146,"top":0.17677574,"width":0.0026595744,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":16,"bounds":{"left":0.985871,"top":0.17677574,"width":0.0014960107,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Filter files…","depth":16,"bounds":{"left":0.46110374,"top":0.22067039,"width":0.06815159,"height":0.023942538},"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Filter options","depth":16,"bounds":{"left":0.53224736,"top":0.21987231,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"File tree","depth":15,"bounds":{"left":0.45013297,"top":0.25818038,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"File tree","depth":16,"bounds":{"left":0.45013297,"top":0.26097366,"width":0.014295213,"height":0.0518755},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":19,"bounds":{"left":0.4660904,"top":0.264166,"width":0.008144947,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Component","depth":21,"bounds":{"left":0.46875,"top":0.29010376,"width":0.025099734,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ElasticSearch/Contract","depth":23,"bounds":{"left":0.4714096,"top":0.31564245,"width":0.049035903,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Searchable.php","depth":25,"bounds":{"left":0.47406915,"top":0.34118116,"width":0.03357713,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Searchable.php","depth":26,"bounds":{"left":0.47406915,"top":0.34118116,"width":0.03357713,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ES","depth":23,"bounds":{"left":0.4714096,"top":0.36671987,"width":0.0056515955,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Processor","depth":25,"bounds":{"left":0.47406915,"top":0.3926576,"width":0.021609042,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actions","depth":27,"bounds":{"left":0.47672874,"top":0.41819632,"width":0.016123671,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"LoadDocumentsAction.php","depth":29,"bounds":{"left":0.4793883,"top":0.4441341,"width":0.05817819,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Traits","depth":27,"bounds":{"left":0.47672874,"top":0.4696728,"width":0.011968086,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SkipActivityTrait.php","depth":29,"bounds":{"left":0.4793883,"top":0.49521148,"width":0.044049203,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"EntityQueryBuilder.php","depth":27,"bounds":{"left":0.47672874,"top":0.5207502,"width":0.049700797,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"EntityQueryBuilder.php","depth":28,"bounds":{"left":0.47672874,"top":0.5207502,"width":0.049700797,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repositories","depth":25,"bounds":{"left":0.47406915,"top":0.5462889,"width":0.026595745,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8657280698749295265
|
-1205474299105199737
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 3 Q2 - Platform Team - Scrum Board Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Unnamed Group
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -5,69 +5,64 @@5namespace Jiminny\Component\ES\Processor\Actions;5namespace Jiminny\Component\ES\Processor\Actions;667use Elastica\Document;7use Elastica\Document;8-use Illuminate\Support\Collection;9use Jiminny\Component\ElasticSearch\Contract\Searchable;8use Jiminny\Component\ElasticSearch\Contract\Searchable;10use Jiminny\Component\ES\Processor\DTOs\DocumentLoad;9use Jiminny\Component\ES\Processor\DTOs\DocumentLoad;11use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;10use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;12use Jiminny\Component\ES\Processor\EntityQueryBuilder;11use Jiminny\Component\ES\Processor\EntityQueryBuilder;13-use Jiminny\Component\ES\Processor\Traits\SkipActivityTrait;14use Jiminny\Exceptions\SyncActivityException;12use Jiminny\Exceptions\SyncActivityException;15use Jiminny\Models\Model;13use Jiminny\Models\Model;16use Sentry\Laravel\Facade as Sentry;14use Sentry\Laravel\Facade as Sentry;15+use Throwable;171618class LoadDocumentsAction17class LoadDocumentsAction19{18{20-use SkipActivityTrait;19+public function __construct(21-20+private readonly EntityQueryBuilder $queryBuilder22-private const int RDS_CHUNK_SIZE = 250;21+ ) {22+ }232324-/**25- * @codeCoverageIgnore26- */27public function loadDocuments(string $updateTarget, array $entityIdsList): DocumentLoad24public function loadDocuments(string $updateTarget, array $entityIdsList): DocumentLoad28 {25 {29$documentsToUpdate = new SimpleCollection();26$documentsToUpdate = new SimpleCollection();30$documentsToDelete = new SimpleCollection();27$documentsToDelete = new SimpleCollection();312832-// do get mariadb data29+$query = $this->queryBuilder->getEntityQuery($updateTarget, $entityIdsList);33-$query = EntityQueryBuilder::getEntityQuery($updateTarget, $entityIdsList);343035-$query->chunkByIdDesc(31+/** @var Model&Searchable $entityModel */36-self::RDS_CHUNK_SIZE,32+foreach ($query->cursor() as $entityModel) {37-function (Collection $entityModels) use ($documentsToUpdate, $documentsToDelete) {33+if ($entityModel->isDeleted()) {38-/** @var Model&Searchable $entityForDeletion */34+/**39-foreach ($entityModels->whereNotNull('deleted_at') as $entityForDeletion) {35+ * Cleanup (from ElasticSearch) scheduled entities that were recently deleted.40-$documentsToDelete->add($entityForDeletion->getId());36+ * After a deletion, no more updates on a record are expected, so the operation is considered final,41- }37+ * unless the record is restored.42-38+ */43-/** @var Model&Searchable $entityModel */39+$documentsToDelete->add($entityModel->getId());44-foreach ($entityModels->whereNull('deleted_at') as $entityModel) {40+ } else {45-if (self::shouldSkipActivity($entityModel)) {41+try {46-/**42+$documentsToUpdate->add(47- * If the activity type is in the skip list, we should not push it for indexing.43+new Document((string) $entityModel->getId(), $entityModel->getIndexableAttributes())48- * If an ES record already exists, we should remove it to free up storage and processing power44+ );49- */45+ } catch (Throwable $error) {50-$documentsToDelete->add($entityModel->getId());46+ Sentry::captureException(51-47+new SyncActivityException(52-continue;48+'ES entity async RDS build data failed',53- }49+$error->getCode(),54-50+$error55-try {51+ )56-$documentsToUpdate->add(52+ );57-new Document((string) $entityModel->getId(), $entityModel->getIndexableAttributes())58- );59- } catch (\Throwable $error) {60- Sentry::captureException(61-new SyncActivityException(62-'ES entity async RDS build data failed',63-$error->getCode(),64-$error65- )66- );67- }68 }53 }69 }54 }70- );55+56+/**57+ * Clean up fragmented memory.58+ * Dropping relations and unsetting the entity model after hydration and usage,59+ * allows GC to remove heap memory allocations, and recycle already allocated memory,60+ * instead of allocating more memory from OS.61+ * Unset operations signal GC to collect destroyed object memory62+ */63+$entityModel->setRelations([]);64+ unset($entityModel);65+ }716672return new DocumentLoad($documentsToUpdate, $documentsToDelete);67return new DocumentLoad($documentsToUpdate, $documentsToDelete);73 }68 }</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 20820 es reindex stream model hydration by Vasi</tabTitle>” with “<selection>@@ -5,69 +5,64 @@5namespace Jiminny\Component\ES\Processor\Actions;5namespace Jiminny\Component\ES\Processor\Actions;667use Elastica\Document;7use Elastica\Document;8-use Illuminate\Support\Collection;9use Jiminny\Component\ElasticSearch\Contract\Searchable;8use Jiminny\Component\ElasticSearch\Contract\Searchable;10use Jiminny\Component\ES\Processor\DTOs\DocumentLoad;9use Jiminny\Component\ES\Processor\DTOs\DocumentLoad;11use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;10use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;12use Jiminny\Component\ES\Processor\EntityQueryBuilder;11use Jiminny\Component\ES\Processor\EntityQueryBuilder;13-use Jiminny\Component\ES\Processor\Traits\SkipActivityTrait;14use Jiminny\Exceptions\SyncActivityException;12use Jiminny\Exceptions\SyncActivityException;15use Jiminny\Models\Model;13use Jiminny\Models\Model;16use Sentry\Laravel\Facade as Sentry;14use Sentry\Laravel\Facade as Sentry;15+use Throwable;171618class LoadDocumentsAction17class LoadDocumentsAction19{18{20-use SkipActivityTrait;19+public function __construct(21-20+private readonly EntityQueryBuilder $queryBuilder22-private const int RDS_CHUNK_SIZE = 250;21+ ) {22+ }232324-/**25- * @codeCoverageIgnore26- */27public function loadDocuments(string $updateTarget, array $entityIdsList): DocumentLoad24public function loadDocuments(string $updateTarget, array $entityIdsList): DocumentLoad28 {25 {29$documentsToUpdate = new SimpleCollection();26$documentsToUpdate = new SimpleCollection();30$documentsToDelete = new SimpleCollection();27$documentsToDelete = new SimpleCollection();312832-// do get mariadb data29+$query = $this->queryBuilder->getEntityQuery($updateTarget, $entityIdsList);33-$query = EntityQueryBuilder::getEntityQuery($updateTarget, $entityIdsList);343035-$query->chunkByIdDesc(31+/** @var Model&Searchable $entityModel */36-self::RDS_CHUNK_SIZE,32+foreach ($query->cursor() as $entityModel) {37-function (Collection $entityModels) use ($documentsToUpdate, $documentsToDelete) {33+if ($entityModel->isDeleted()) {38-/** @var Model&Searchable $entityForDeletion */34+/**39-foreach ($entityModels->whereNotNull('deleted_at') as $entityForDeletion) {35+ * Cleanup (from ElasticSearch) scheduled entities that were recently deleted.40-$documentsToDelete->add($entityForDeletion->getId());36+ * After a deletion, no more updates on a record are expected, so the operation is considered final,41- }37+ * unless the record is restored.42-38+ */43-/** @var Model&Searchable $entityModel */39+$documentsToDelete->add($entityModel->getId());44-foreach ($entityModels->whereNull('deleted_at') as $entityModel) {40+ } else {45-if (self::shouldSkipActivity($entityModel)) {41+try {46-/**42+$documentsToUpdate->add(47- * If the activity type is in the skip list, we should not push it for indexing.43+new Document((string) $entityModel->getId(), $entityModel->getIndexableAttributes())48- * If an ES record already exists, we should remove it to free up storage and processing power44+ );49- */45+ } catch (Throwable $error) {50-$documentsToDelete->add($entityModel->getId());46+ Sentry::captureException(51-47+new SyncActivityException(52-continue;48+'ES entity async RDS build data failed',53- }49+$error->getCode(),54-50+$error55-try {51+ )56-$documentsToUpdate->add(52+ );57-new Document((string) $entityModel->getId(), $entityModel->getIndexableAttributes())58- );59- } catch (\Throwable $error) {60- Sentry::captureException(61-new SyncActivityException(62-'ES entity async RDS build data failed',63-$error->getCode(),64-$error65- )66- );67- }68 }53 }69 }54 }70- );55+56+/**57+ * Clean up fragmented memory.58+ * Dropping relations and unsetting the entity model after hydration and usage,59+ * allows GC to remove heap memory allocations, and recycle already allocated memory,60+ * instead of allocating more memory from OS.61+ * Unset operations signal GC to collect destroyed object memory62+ */63+$entityModel->setRelations([]);64+ unset($entityModel);65+ }716672return new DocumentLoad($documentsToUpdate, $documentsToDelete);67return new DocumentLoad($documentsToUpdate, $documentsToDelete);73 }68 }</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
Gemini said
Gemini said
Enter a prompt for Gemini
encrypted
Enter a prompt for Gemini
encrypted
Open upload file menu
Tools
Open mode picker
Pro
Stop response
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Gemini replied
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (33)
Pull requests
(
33
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (2)
Security and quality
(
2
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
Jy 20820 es reindex stream model hydration #12059 Edit title
Jy 20820 es reindex stream model hydration
#
12059
Edit title
Preview
Preview
Awaiting approval
Awaiting approval
Code
Code
Open
Vasil-Jiminny
Vasil-Jiminny
wants to merge 35 commits into
master
master
from
JY-20820-es-reindex-stream-model-hydration
JY-20820-es-reindex-stream-model-hydration
Copy head branch name to clipboard
Lines changed: 363 additions & 140 deletions
Conversation (8)
Conversation
(
8
)
Commits (35)
Commits
(
35
)
Checks (3)
Checks
(
3
)
Files changed (12)
Files changed
(
12
)
Pull Request Toolbar
Pull Request Toolbar
Collapse file tree
All commits
All commits
0 of 12 files viewed
Submit review
Submit
review
Open diff view settings
Open overview panel
Open comments panel
(
0
)
Filter files…
Filter options
File tree
File tree
app
Component
ElasticSearch/Contract
Searchable.php
Searchable.php
ES
Processor
Actions
LoadDocumentsAction.php
Traits
SkipActivityTrait.php
EntityQueryBuilder.php
EntityQueryBuilder.php
Repositories...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
11816
|
528
|
39
|
2026-05-09T07:04:03.157165+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778310243157_m2.jpg...
|
Firefox
|
Електронно банкиране ДСК Директ от Банка ДСК — Per Електронно банкиране ДСК Директ от Банка ДСК — Personal...
|
True
|
www.dskdirect.bg/page/default.aspx?user_id=1130906 www.dskdirect.bg/page/default.aspx?user_id=11309067&session_id=19d32dbc4b7511f19be7005056b08056qPz%2fDcUPDONnWIOWsLenTxdNOVxA8Ojp5X8xyKp62fgpRGSRqUQlYLh96t2cWeyEmh8FvVnTUtgNN-cAzQcZaw%3d%3dU&xml_id=/bg-BG/01Individuals/02Accounts/07Excerpts/&SelectedAccountID=31823319...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
DNS / Nameservers | Hostinger
DNS / Nameservers | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Оптичен интернет за дома - EON телевизия | Vivacom | 5G
Оптичен интернет за дома - EON телевизия | Vivacom | 5G
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Payments Logger
Payments Logger
[NirDiamant/GenAI_Agents] Add SwarmScore — Portable Trust Rating for AI Agents (Issue #115) - [EMAIL] - Gmail
[NirDiamant/GenAI_Agents] Add SwarmScore — Portable Trust Rating for AI Agents (Issue #115) - [EMAIL] - Gmail
New Tab
New Tab
Location Logger
Location Logger
Finance Hub
Finance Hub
Finance Hub
Finance Hub
Select: payments - db - Adminer
Select: payments - db - Adminer
Електронно банкиране ДСК Директ от Банка ДСК
Електронно банкиране ДСК Директ от Банка ДСК
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
LUKAS KOVALIK
1 Входяща поща
1
Входяща поща
Обратна връзка
Обратна връзка
English
English
Изход
Изход
СРЕДСТВА
СРЕДСТВА
КРЕДИТИ
КРЕДИТИ
КАРТИ
КАРТИ
БИТОВИ СМЕТКИ
БИТОВИ СМЕТКИ
ПРЕВОДИ
ПРЕВОДИ
СПЕСТЯВАНЕ
СПЕСТЯВАНЕ
ФОНДОВЕ
ФОНДОВЕ
ЗАЯВКИ
ЗАЯВКИ
ИЗВЕСТИЯ
ИЗВЕСТИЯ
СМАРТ ПРИЛОЖЕНИЯ
СМАРТ ПРИЛОЖЕНИЯ
НАСТРОЙКИ
НАСТРОЙКИ
С какво разполагам
С какво разполагам
Извлечения PDF
Извлечения PDF
Извлечения за период / месец
Извлечения за период / месец
Движения по сметки
Движения по сметки
Справка за IBAN
Справка за IBAN
Движения
Движения
Управление на бърз достъп до менюта.
Банков клиент
Сметка
Движения
Основание
Отсрещна страна - име
Отсрещна страна - сметка
Последните
Последните
10
За период от
За период от
09.05.2026
до
09.05.2026
Днес
Днес
От началото на месеца
От началото на месеца
От началото на годината
От началото на годината
Сума от
до
Експорт към файл
Покажи
Покажи
: No sort applied, sorting is disabled
Дата: No sort applied, activate to apply an ascending sort
▲
ДАТА
▼
Основание: No sort applied, activate to apply an ascending sort
▲
ОСНОВАНИЕ
▼
Наредител/Получател: No sort applied, activate to apply an ascending sort
▲
НАРЕДИТЕЛ/ПОЛУЧАТЕЛ
▼
Номер сметка на наредителя / получателя: No sort applied, activate to apply an ascending sort
▲
НОМЕР СМЕТКА НА НАРЕДИТЕЛЯ / ПОЛУЧАТЕЛЯ
▼
Дебит: No sort applied, activate to apply an ascending sort
▲
ДЕБИТ
▼
Кредит: No sort applied, activate to apply an ascending sort
▲
КРЕДИТ
▼
400915xxxxxx4447 ПОС 08.05.2026 18:46
Авт. код: 36C1UB
Блокирана до 22.06.2026
5.02
400915xxxxxx4447 ПОС 08.05.2026 18:36
Авт. код: 5CK9TB
Блокирана до 22.06.2026
15.46
400915xxxxxx4447 ПОС 08.05.2026 18:07
Авт. код: 8FK4TB
Блокирана до 22.06.2026
9.04
08.05.2026
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 08.05.2026 19:32
Авт. код: 6NM31C
Номер на у-во: V5411421
BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR
67.81
08.05.2026
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 07.05.2026 09:02
Авт. код: 7NE8N7
Номер на у-во: 10101446
BGR SOFIA CBA EKO MARKET
5.51
08.05.2026
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 06.05.2026 13:16
Авт. код: 1TV886
Номер на у-во: 06030191
POL BALICE Lagardere Travel R KR3
5.49
07.05.2026
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 05.05.2026 12:02
Авт. код: 9XC9W3
Номер на у-во: 10048984
SVK Nizna Dr Max 651 Nizna
24.27
07.05.2026
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 03.05.2026 12:50
Авт. код: 5K645Z
Номер на у-во: TV509902
SVK TRSTENA LEK HORNOORAV NEM
23.28
07.05.2026
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 04.05.2026 15:57
Авт. код: 2BU0F2
Номер на у-во: xMtaL1xx
SVK ORAVSKY PODZA ORAVSKY HRAD
18.00
07.05.2026
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 06.05.2026 17:19
Авт. код: 4VC9R6
Номер на у-во: 80411471
BGR SOFIA TAXI 065
17.00
Общо
190.88
0.00
: No sort applied, sorting is disabled
Общо
Дата: No sort applied, activate to apply an ascending sort
▲
ДАТА
▼
08.05.2026
08.05.2026
08.05.2026
07.05.2026
07.05.2026
07.05.2026
07.05.2026
Общо
Основание: No sort applied, activate to apply an ascending sort
▲
ОСНОВАНИЕ
▼
400915xxxxxx4447 ПОС 08.05.2026 18:46
Авт. код: 36C1UB
Блокирана до 22.06.2026
400915xxxxxx4447 ПОС 08.05.2026 18:36
Авт. код: 5CK9TB
Блокирана до 22.06.2026
400915xxxxxx4447 ПОС 08.05.2026 18:07
Авт. код: 8FK4TB
Блокирана до 22.06.2026
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 08.05.2026 19:32
Авт. код: 6NM31C
Номер на у-во: V5411421
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 07.05.2026 09:02
Авт. код: 7NE8N7
Номер на у-во: 10101446
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 06.05.2026 13:16
Авт. код: 1TV886
Номер на у-во: 06030191
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 05.05.2026 12:02
Авт. код: 9XC9W3
Номер на у-во: 10048984
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 03.05.2026 12:50
Авт. код: 5K645Z
Номер на у-во: TV509902
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 04.05.2026 15:57
Авт. код: 2BU0F2
Номер на у-во: xMtaL1xx
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 06.05.2026 17:19
Авт. код: 4VC9R6
Номер на у-во: 80411471
Общо
Наредител/Получател: No sort applied, activate to apply an ascending sort
▲
НАРЕДИТЕЛ/ПОЛУЧАТЕЛ
▼
BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR
BGR SOFIA CBA EKO MARKET
POL BALICE Lagardere Travel R KR3
SVK Nizna Dr Max 651 Nizna
SVK TRSTENA LEK HORNOORAV NEM
SVK ORAVSKY PODZA ORAVSKY HRAD
BGR SOFIA TAXI 065
Общо
Номер сметка на наредителя / получателя: No sort applied, activate to apply an ascending sort
▲
НОМЕР СМЕТКА НА НАРЕДИТЕЛЯ / ПОЛУЧАТЕЛЯ
▼
Общо
Дебит: No sort applied, activate to apply an ascending sort
▲
ДЕБИТ
▼
5.02
15.46
9.04
67.81
5.51
5.49
24.27
23.28
18.00
17.00
190.88
Кредит: No sort applied, activate to apply an ascending sort
▲
КРЕДИТ
▼
0.00
*Фиксиран курс за целите на двойно обозначение 1 EUR = 1.95583 BGN
Потребителско ръководство - граждани
Потребителско ръководство - граждани
Общи условия за граждани
Общи условия за граждани
Тарифа за граждани
Тарифа за граждани
Call center:
*2375
0700 10 375
Потребителско ръководство - фирми
Потребителско ръководство - фирми
Общи условия за фирми
Общи условия за фирми
Тарифа за фирми
Тарифа за фирми
BIC/SWIFT на Банка ДСК: STSABGSF ©
2026 on DAIS eBank .NET
www.dskdirect.bg/page/default.aspx?user_id=11309067&session_id=19d32dbc4b7511f19be7005056b08056qPz/DcUPDONnWIOWsLenTxdNOVxA8Ojp5X8xyKp62fgpRGSRqUQlYLh96t2cWeyEmh8FvVnTUtgNN-cAzQcZaw==U&xml_id=/bg-BG/01Individuals/02Accounts/04Movements/&c2s=AccountMovements&AccountMovements_action_mvc=ShowResultsAll...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · screenpipe/screenpipe · GitHub","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.080784574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DNS / Nameservers | Hostinger","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DNS / Nameservers | Hostinger","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.053856384,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nginx Proxy Manager","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nginx Proxy Manager","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.040724736,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.03756649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.11469415,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Оптичен интернет за дома - EON телевизия | Vivacom | 5G","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Оптичен интернет за дома - EON телевизия | Vivacom | 5G","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.105884306,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"AFFiNE - All In One KnowledgeOS","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AFFiNE - All In One KnowledgeOS","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.05851064,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All docs · AFFiNE","depth":4,"bounds":{"left":0.0,"top":0.3790902,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All docs · AFFiNE","depth":5,"bounds":{"left":0.013297873,"top":0.39026338,"width":0.029587766,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Payments Logger","depth":4,"bounds":{"left":0.0,"top":0.41181165,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Payments Logger","depth":5,"bounds":{"left":0.013297873,"top":0.42298484,"width":0.030086435,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[NirDiamant/GenAI_Agents] Add SwarmScore — Portable Trust Rating for AI Agents (Issue #115) - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.0,"top":0.4445331,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[NirDiamant/GenAI_Agents] Add SwarmScore — Portable Trust Rating for AI Agents (Issue #115) - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.013297873,"top":0.4557063,"width":0.22639628,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.4772546,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.013297873,"top":0.4884278,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Location Logger","depth":4,"bounds":{"left":0.0,"top":0.509976,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Location Logger","depth":5,"bounds":{"left":0.013297873,"top":0.5211492,"width":0.028091755,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"bounds":{"left":0.0,"top":0.54269755,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Finance Hub","depth":5,"bounds":{"left":0.013297873,"top":0.55387074,"width":0.021609042,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"bounds":{"left":0.0,"top":0.575419,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Finance Hub","depth":5,"bounds":{"left":0.013297873,"top":0.5865922,"width":0.021609042,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Select: payments - db - Adminer","depth":4,"bounds":{"left":0.0,"top":0.60814047,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select: payments - db - Adminer","depth":5,"bounds":{"left":0.013297873,"top":0.61931366,"width":0.05651596,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Електронно банкиране ДСК Директ от Банка ДСК","depth":4,"bounds":{"left":0.0,"top":0.6408619,"width":0.113696806,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Електронно банкиране ДСК Директ от Банка ДСК","depth":5,"bounds":{"left":0.013297873,"top":0.6520351,"width":0.09059176,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.10139628,"top":0.6480447,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.67517954,"width":0.108211435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LUKAS KOVALIK","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Входяща поща","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Входяща поща","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Обратна връзка","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Обратна връзка","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"English","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"English","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Изход","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Изход","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"СРЕДСТВА","depth":14,"bounds":{"left":0.42652926,"top":0.0,"width":0.027094414,"height":0.054269753},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"СРЕДСТВА","depth":15,"bounds":{"left":0.42918882,"top":0.0,"width":0.021775266,"height":0.014365523},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"КРЕДИТИ","depth":14,"bounds":{"left":0.45495346,"top":0.0,"width":0.024767287,"height":0.044692736},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"КРЕДИТИ","depth":15,"bounds":{"left":0.45761302,"top":0.0,"width":0.019448139,"height":0.014365523},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"КАРТИ","depth":14,"bounds":{"left":0.48105052,"top":0.0,"width":0.01861702,"height":0.044692736},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"КАРТИ","depth":15,"bounds":{"left":0.4837101,"top":0.0,"width":0.013297873,"height":0.014365523},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"БИТОВИ СМЕТКИ","depth":14,"bounds":{"left":0.50099736,"top":0.0,"width":0.039893616,"height":0.044692736},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"БИТОВИ СМЕТКИ","depth":15,"bounds":{"left":0.5036569,"top":0.0,"width":0.034574468,"height":0.014365523},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ПРЕВОДИ","depth":14,"bounds":{"left":0.5422208,"top":0.0,"width":0.025099734,"height":0.044692736},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ПРЕВОДИ","depth":15,"bounds":{"left":0.54488033,"top":0.0,"width":0.019780586,"height":0.014365523},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"СПЕСТЯВАНЕ","depth":14,"bounds":{"left":0.56865025,"top":0.0,"width":0.031914894,"height":0.044692736},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"СПЕСТЯВАНЕ","depth":15,"bounds":{"left":0.57130986,"top":0.0,"width":0.026595745,"height":0.014365523},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ФОНДОВЕ","depth":14,"bounds":{"left":0.601895,"top":0.0,"width":0.026097074,"height":0.044692736},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ФОНДОВЕ","depth":15,"bounds":{"left":0.60455453,"top":0.0,"width":0.020777926,"height":0.014365523},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ЗАЯВКИ","depth":14,"bounds":{"left":0.6293218,"top":0.0,"width":0.021609042,"height":0.044692736},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ЗАЯВКИ","depth":15,"bounds":{"left":0.6319814,"top":0.0,"width":0.016289894,"height":0.014365523},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ИЗВЕСТИЯ","depth":14,"bounds":{"left":0.65226066,"top":0.0,"width":0.026928192,"height":0.044692736},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ИЗВЕСТИЯ","depth":15,"bounds":{"left":0.6549202,"top":0.0,"width":0.021609042,"height":0.014365523},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"СМАРТ ПРИЛОЖЕНИЯ","depth":14,"bounds":{"left":0.6805186,"top":0.0,"width":0.049534574,"height":0.044692736},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"СМАРТ ПРИЛОЖЕНИЯ","depth":15,"bounds":{"left":0.6831782,"top":0.0,"width":0.044215426,"height":0.014365523},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"НАСТРОЙКИ","depth":14,"bounds":{"left":0.73138297,"top":0.0,"width":0.030418882,"height":0.044692736},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"НАСТРОЙКИ","depth":15,"bounds":{"left":0.7340425,"top":0.0,"width":0.025099734,"height":0.014365523},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"С какво разполагам","depth":14,"bounds":{"left":0.36735374,"top":0.0,"width":0.048204787,"height":0.030327214},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"С какво разполагам","depth":15,"bounds":{"left":0.37134308,"top":0.0,"width":0.040226065,"height":0.014365523},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Извлечения PDF","depth":14,"bounds":{"left":0.4175532,"top":0.0,"width":0.04138963,"height":0.030327214},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Извлечения PDF","depth":15,"bounds":{"left":0.42154256,"top":0.0,"width":0.033410903,"height":0.014365523},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Извлечения за период / месец","depth":14,"bounds":{"left":0.4609375,"top":0.0,"width":0.06981383,"height":0.030327214},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Извлечения за период / месец","depth":15,"bounds":{"left":0.46492687,"top":0.0,"width":0.061835106,"height":0.014365523},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Движения по сметки","depth":14,"bounds":{"left":0.532746,"top":0.0,"width":0.05036569,"height":0.03431764},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Движения по сметки","depth":15,"bounds":{"left":0.53673536,"top":0.0,"width":0.042386968,"height":0.014365523},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Справка за IBAN","depth":14,"bounds":{"left":0.5851064,"top":0.0,"width":0.04089096,"height":0.030327214},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Справка за IBAN","depth":15,"bounds":{"left":0.5890958,"top":0.0,"width":0.032912236,"height":0.014365523},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Движения","depth":12,"bounds":{"left":0.36735374,"top":0.0415004,"width":0.027759308,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Движения","depth":13,"bounds":{"left":0.36735374,"top":0.048284117,"width":0.027759308,"height":0.018355945},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Управление на бърз достъп до менюта.","depth":13,"bounds":{"left":0.39511302,"top":0.0415004,"width":0.021276595,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Банков клиент","depth":13,"bounds":{"left":0.3776596,"top":0.12689546,"width":0.03025266,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Сметка","depth":13,"bounds":{"left":0.3776596,"top":0.15881884,"width":0.01462766,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Движения","depth":13,"bounds":{"left":0.3776596,"top":0.19074222,"width":0.021110373,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Основание","depth":13,"bounds":{"left":0.3776596,"top":0.22266561,"width":0.022606382,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Отсрещна страна - име","depth":13,"bounds":{"left":0.3776596,"top":0.24980047,"width":0.03557181,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Отсрещна страна - сметка","depth":13,"bounds":{"left":0.3776596,"top":0.28651237,"width":0.03557181,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Последните","depth":13,"bounds":{"left":0.5618351,"top":0.12849163,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Последните","depth":13,"bounds":{"left":0.56981385,"top":0.12689546,"width":0.024601065,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"10","depth":12,"bounds":{"left":0.6130319,"top":0.12210695,"width":0.03656915,"height":0.023942538},"on_screen":true,"value":"10","help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"За период от","depth":13,"bounds":{"left":0.5618351,"top":0.16041501,"width":0.004654255,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"За период от","depth":13,"bounds":{"left":0.56981385,"top":0.15881884,"width":0.02642952,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"09.05.2026","depth":12,"bounds":{"left":0.6130319,"top":0.15403032,"width":0.03656915,"height":0.023942538},"on_screen":true,"value":"09.05.2026","help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"до","depth":13,"bounds":{"left":0.65226066,"top":0.15881884,"width":0.004986702,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"09.05.2026","depth":12,"bounds":{"left":0.6609042,"top":0.15403032,"width":0.03656915,"height":0.023942538},"on_screen":true,"value":"09.05.2026","help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Днес","depth":12,"bounds":{"left":0.56017286,"top":0.1859537,"width":0.020611702,"height":0.023942538},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Днес","depth":13,"bounds":{"left":0.56582445,"top":0.19233839,"width":0.009973404,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"От началото на месеца","depth":12,"bounds":{"left":0.58078456,"top":0.1859537,"width":0.057347074,"height":0.023942538},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"От началото на месеца","depth":13,"bounds":{"left":0.58643615,"top":0.19233839,"width":0.046708778,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"От началото на годината","depth":12,"bounds":{"left":0.6381317,"top":0.1859537,"width":0.06216755,"height":0.023942538},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"От началото на годината","depth":13,"bounds":{"left":0.6437833,"top":0.19233839,"width":0.05086436,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Сума от","depth":13,"bounds":{"left":0.5618351,"top":0.22266561,"width":0.015625,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"до","depth":13,"bounds":{"left":0.6409575,"top":0.22266561,"width":0.004986702,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Експорт към файл","depth":12,"bounds":{"left":0.61170214,"top":0.3367917,"width":0.05718085,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Покажи","depth":11,"bounds":{"left":0.67386967,"top":0.3367917,"width":0.031416222,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"Покажи","depth":12,"bounds":{"left":0.6805186,"top":0.34477255,"width":0.018118352,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":": No sort applied, sorting is disabled","depth":14,"bounds":{"left":0.37832448,"top":0.43256184,"width":0.009142287,"height":0.056264963},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXCell","text":"Дата: No sort applied, activate to apply an ascending sort","depth":14,"bounds":{"left":0.38746676,"top":0.43256184,"width":0.027593086,"height":0.056264963},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▲","depth":16,"bounds":{"left":0.4089096,"top":0.46368715,"width":0.0028257978,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДАТА","depth":16,"bounds":{"left":0.39079124,"top":0.46528333,"width":0.009973404,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▼","depth":16,"bounds":{"left":0.4089096,"top":0.47007182,"width":0.0028257978,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Основание: No sort applied, activate to apply an ascending sort","depth":14,"bounds":{"left":0.41505983,"top":0.43256184,"width":0.11585771,"height":0.056264963},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▲","depth":16,"bounds":{"left":0.5247673,"top":0.46368715,"width":0.0028257978,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ОСНОВАНИЕ","depth":16,"bounds":{"left":0.4183843,"top":0.46528333,"width":0.024933511,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▼","depth":16,"bounds":{"left":0.5247673,"top":0.47007182,"width":0.0028257978,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Наредител/Получател: No sort applied, activate to apply an ascending sort","depth":14,"bounds":{"left":0.5309175,"top":0.43256184,"width":0.09740692,"height":0.056264963},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▲","depth":16,"bounds":{"left":0.62234044,"top":0.46368715,"width":0.0026595744,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"НАРЕДИТЕЛ/ПОЛУЧАТЕЛ","depth":16,"bounds":{"left":0.53424203,"top":0.46528333,"width":0.04936835,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▼","depth":16,"bounds":{"left":0.62234044,"top":0.47007182,"width":0.0026595744,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Номер сметка на наредителя / получателя: No sort applied, activate to apply an ascending sort","depth":14,"bounds":{"left":0.62832445,"top":0.43256184,"width":0.05651596,"height":0.056264963},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▲","depth":16,"bounds":{"left":0.6788564,"top":0.46368715,"width":0.0026595744,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"НОМЕР СМЕТКА НА НАРЕДИТЕЛЯ / ПОЛУЧАТЕЛЯ","depth":16,"bounds":{"left":0.63164896,"top":0.4405427,"width":0.037732713,"height":0.037110932},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▼","depth":16,"bounds":{"left":0.6788564,"top":0.47007182,"width":0.0026595744,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Дебит: No sort applied, activate to apply an ascending sort","depth":14,"bounds":{"left":0.68484044,"top":0.43256184,"width":0.025598405,"height":0.056264963},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▲","depth":16,"bounds":{"left":0.7044548,"top":0.46368715,"width":0.0026595744,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДЕБИТ","depth":16,"bounds":{"left":0.6888298,"top":0.46528333,"width":0.013297873,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▼","depth":16,"bounds":{"left":0.7044548,"top":0.47007182,"width":0.0026595744,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Кредит: No sort applied, activate to apply an ascending sort","depth":14,"bounds":{"left":0.71043885,"top":0.43256184,"width":0.024933511,"height":0.056264963},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▲","depth":16,"bounds":{"left":0.73271275,"top":0.46368715,"width":0.0026595744,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КРЕДИТ","depth":16,"bounds":{"left":0.7144282,"top":0.46528333,"width":0.015957447,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▼","depth":16,"bounds":{"left":0.73271275,"top":0.47007182,"width":0.0026595744,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПОС 08.05.2026 18:46","depth":17,"bounds":{"left":0.4183843,"top":0.49840382,"width":0.07829122,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 36C1UB","depth":17,"bounds":{"left":0.4183843,"top":0.51276934,"width":0.03374335,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Блокирана до 22.06.2026","depth":17,"bounds":{"left":0.4183843,"top":0.5271349,"width":0.050033245,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.02","depth":16,"bounds":{"left":0.6984708,"top":0.51276934,"width":0.008643617,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПОС 08.05.2026 18:36","depth":17,"bounds":{"left":0.4183843,"top":0.55905825,"width":0.07829122,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 5CK9TB","depth":17,"bounds":{"left":0.4183843,"top":0.5734238,"width":0.03357713,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Блокирана до 22.06.2026","depth":17,"bounds":{"left":0.4183843,"top":0.5877893,"width":0.050033245,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15.46","depth":16,"bounds":{"left":0.6959774,"top":0.5734238,"width":0.011136968,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПОС 08.05.2026 18:07","depth":17,"bounds":{"left":0.4183843,"top":0.6197127,"width":0.07829122,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 8FK4TB","depth":17,"bounds":{"left":0.4183843,"top":0.6340782,"width":0.03324468,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Блокирана до 22.06.2026","depth":17,"bounds":{"left":0.4183843,"top":0.64844376,"width":0.050033245,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.04","depth":16,"bounds":{"left":0.6984708,"top":0.6340782,"width":0.008643617,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"08.05.2026","depth":16,"bounds":{"left":0.39079124,"top":0.69473267,"width":0.020944148,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 08.05.2026 19:32","depth":17,"bounds":{"left":0.4183843,"top":0.6803671,"width":0.10621676,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 6NM31C","depth":17,"bounds":{"left":0.4183843,"top":0.69473267,"width":0.034408245,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Номер на у-во: V5411421","depth":17,"bounds":{"left":0.4183843,"top":0.70909816,"width":0.04936835,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR","depth":16,"bounds":{"left":0.53424203,"top":0.69473267,"width":0.08843085,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"67.81","depth":16,"bounds":{"left":0.6959774,"top":0.69473267,"width":0.011136968,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"08.05.2026","depth":16,"bounds":{"left":0.39079124,"top":0.75538707,"width":0.020944148,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 07.05.2026 09:02","depth":17,"bounds":{"left":0.4183843,"top":0.7410216,"width":0.10621676,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 7NE8N7","depth":17,"bounds":{"left":0.4183843,"top":0.75538707,"width":0.03374335,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Номер на у-во: 10101446","depth":17,"bounds":{"left":0.4183843,"top":0.7697526,"width":0.04920213,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BGR SOFIA CBA EKO MARKET","depth":16,"bounds":{"left":0.53424203,"top":0.75538707,"width":0.055851065,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.51","depth":16,"bounds":{"left":0.6984708,"top":0.75538707,"width":0.008643617,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"08.05.2026","depth":16,"bounds":{"left":0.39079124,"top":0.8160415,"width":0.020944148,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 06.05.2026 13:16","depth":17,"bounds":{"left":0.4183843,"top":0.801676,"width":0.10621676,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 1TV886","depth":17,"bounds":{"left":0.4183843,"top":0.8160415,"width":0.032579787,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Номер на у-во: 06030191","depth":17,"bounds":{"left":0.4183843,"top":0.830407,"width":0.04920213,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POL BALICE Lagardere Travel R KR3","depth":16,"bounds":{"left":0.53424203,"top":0.8160415,"width":0.06798537,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.49","depth":16,"bounds":{"left":0.6984708,"top":0.8160415,"width":0.008643617,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"07.05.2026","depth":16,"bounds":{"left":0.39079124,"top":0.87669593,"width":0.020944148,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 05.05.2026 12:02","depth":17,"bounds":{"left":0.4183843,"top":0.86233044,"width":0.10621676,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 9XC9W3","depth":17,"bounds":{"left":0.4183843,"top":0.87669593,"width":0.033909574,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Номер на у-во: 10048984","depth":17,"bounds":{"left":0.4183843,"top":0.8910614,"width":0.04920213,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SVK Nizna Dr Max 651 Nizna","depth":16,"bounds":{"left":0.53424203,"top":0.87669593,"width":0.053357713,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"24.27","depth":16,"bounds":{"left":0.6959774,"top":0.87669593,"width":0.011136968,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"07.05.2026","depth":16,"bounds":{"left":0.39079124,"top":0.93735033,"width":0.020944148,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 03.05.2026 12:50","depth":17,"bounds":{"left":0.4183843,"top":0.92298484,"width":0.10621676,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 5K645Z","depth":17,"bounds":{"left":0.4183843,"top":0.93735033,"width":0.032912236,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Номер на у-во: TV509902","depth":17,"bounds":{"left":0.4183843,"top":0.9517159,"width":0.049534574,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SVK TRSTENA LEK HORNOORAV NEM","depth":16,"bounds":{"left":0.53424203,"top":0.93735033,"width":0.0709774,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23.28","depth":16,"bounds":{"left":0.6959774,"top":0.93735033,"width":0.011136968,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"07.05.2026","depth":16,"bounds":{"left":0.39079124,"top":0.9980048,"width":0.020944148,"height":0.0019952059},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 04.05.2026 15:57","depth":17,"bounds":{"left":0.4183843,"top":0.98363924,"width":0.10621676,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 2BU0F2","depth":17,"bounds":{"left":0.4183843,"top":0.9980048,"width":0.033410903,"height":0.0019952059},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Номер на у-во: xMtaL1xx","depth":17,"bounds":{"left":0.4183843,"top":1.0,"width":0.04870346,"height":-0.012370348},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SVK ORAVSKY PODZA ORAVSKY HRAD","depth":16,"bounds":{"left":0.53424203,"top":0.9980048,"width":0.071476065,"height":0.0019952059},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18.00","depth":16,"bounds":{"left":0.6959774,"top":0.9980048,"width":0.011136968,"height":0.0019952059},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"07.05.2026","depth":16,"bounds":{"left":0.39079124,"top":1.0,"width":0.020944148,"height":-0.058659196},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 06.05.2026 17:19","depth":17,"bounds":{"left":0.4183843,"top":1.0,"width":0.10621676,"height":-0.044293642},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 4VC9R6","depth":17,"bounds":{"left":0.4183843,"top":1.0,"width":0.032912236,"height":-0.058659196},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Номер на у-во: 80411471","depth":17,"bounds":{"left":0.4183843,"top":1.0,"width":0.04920213,"height":-0.07302475},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BGR SOFIA TAXI 065","depth":16,"bounds":{"left":0.53424203,"top":1.0,"width":0.038065158,"height":-0.058659196},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17.00","depth":16,"bounds":{"left":0.6959774,"top":1.0,"width":0.011136968,"height":-0.058659196},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Общо","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"190.88","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.00","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":": No sort applied, sorting is disabled","depth":14,"bounds":{"left":0.37832448,"top":0.43256184,"width":0.009142287,"height":0.056264963},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Общо","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Дата: No sort applied, activate to apply an ascending sort","depth":14,"bounds":{"left":0.38746676,"top":0.43256184,"width":0.027593086,"height":0.056264963},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▲","depth":16,"bounds":{"left":0.4089096,"top":0.46368715,"width":0.0028257978,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДАТА","depth":16,"bounds":{"left":0.39079124,"top":0.46528333,"width":0.009973404,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▼","depth":16,"bounds":{"left":0.4089096,"top":0.47007182,"width":0.0028257978,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"08.05.2026","depth":15,"bounds":{"left":0.39079124,"top":0.69473267,"width":0.020944148,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"08.05.2026","depth":15,"bounds":{"left":0.39079124,"top":0.75538707,"width":0.020944148,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"08.05.2026","depth":15,"bounds":{"left":0.39079124,"top":0.8160415,"width":0.020944148,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"07.05.2026","depth":15,"bounds":{"left":0.39079124,"top":0.87669593,"width":0.020944148,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"07.05.2026","depth":15,"bounds":{"left":0.39079124,"top":0.93735033,"width":0.020944148,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"07.05.2026","depth":15,"bounds":{"left":0.39079124,"top":0.9980048,"width":0.020944148,"height":0.0019952059},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"07.05.2026","depth":15,"bounds":{"left":0.39079124,"top":1.0,"width":0.020944148,"height":-0.058659196},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Общо","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Основание: No sort applied, activate to apply an ascending sort","depth":14,"bounds":{"left":0.41505983,"top":0.43256184,"width":0.11585771,"height":0.056264963},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▲","depth":16,"bounds":{"left":0.5247673,"top":0.46368715,"width":0.0028257978,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ОСНОВАНИЕ","depth":16,"bounds":{"left":0.4183843,"top":0.46528333,"width":0.024933511,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▼","depth":16,"bounds":{"left":0.5247673,"top":0.47007182,"width":0.0028257978,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПОС 08.05.2026 18:46","depth":16,"bounds":{"left":0.4183843,"top":0.49840382,"width":0.07829122,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 36C1UB","depth":16,"bounds":{"left":0.4183843,"top":0.51276934,"width":0.03374335,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Блокирана до 22.06.2026","depth":16,"bounds":{"left":0.4183843,"top":0.5271349,"width":0.050033245,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПОС 08.05.2026 18:36","depth":16,"bounds":{"left":0.4183843,"top":0.55905825,"width":0.07829122,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 5CK9TB","depth":16,"bounds":{"left":0.4183843,"top":0.5734238,"width":0.03357713,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Блокирана до 22.06.2026","depth":16,"bounds":{"left":0.4183843,"top":0.5877893,"width":0.050033245,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПОС 08.05.2026 18:07","depth":16,"bounds":{"left":0.4183843,"top":0.6197127,"width":0.07829122,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 8FK4TB","depth":16,"bounds":{"left":0.4183843,"top":0.6340782,"width":0.03324468,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Блокирана до 22.06.2026","depth":16,"bounds":{"left":0.4183843,"top":0.64844376,"width":0.050033245,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 08.05.2026 19:32","depth":16,"bounds":{"left":0.4183843,"top":0.6803671,"width":0.10621676,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 6NM31C","depth":16,"bounds":{"left":0.4183843,"top":0.69473267,"width":0.034408245,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Номер на у-во: V5411421","depth":16,"bounds":{"left":0.4183843,"top":0.70909816,"width":0.04936835,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 07.05.2026 09:02","depth":16,"bounds":{"left":0.4183843,"top":0.7410216,"width":0.10621676,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 7NE8N7","depth":16,"bounds":{"left":0.4183843,"top":0.75538707,"width":0.03374335,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Номер на у-во: 10101446","depth":16,"bounds":{"left":0.4183843,"top":0.7697526,"width":0.04920213,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 06.05.2026 13:16","depth":16,"bounds":{"left":0.4183843,"top":0.801676,"width":0.10621676,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 1TV886","depth":16,"bounds":{"left":0.4183843,"top":0.8160415,"width":0.032579787,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Номер на у-во: 06030191","depth":16,"bounds":{"left":0.4183843,"top":0.830407,"width":0.04920213,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 05.05.2026 12:02","depth":16,"bounds":{"left":0.4183843,"top":0.86233044,"width":0.10621676,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 9XC9W3","depth":16,"bounds":{"left":0.4183843,"top":0.87669593,"width":0.033909574,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Номер на у-во: 10048984","depth":16,"bounds":{"left":0.4183843,"top":0.8910614,"width":0.04920213,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 03.05.2026 12:50","depth":16,"bounds":{"left":0.4183843,"top":0.92298484,"width":0.10621676,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 5K645Z","depth":16,"bounds":{"left":0.4183843,"top":0.93735033,"width":0.032912236,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Номер на у-во: TV509902","depth":16,"bounds":{"left":0.4183843,"top":0.9517159,"width":0.049534574,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 04.05.2026 15:57","depth":16,"bounds":{"left":0.4183843,"top":0.98363924,"width":0.10621676,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 2BU0F2","depth":16,"bounds":{"left":0.4183843,"top":0.9980048,"width":0.033410903,"height":0.0019952059},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Номер на у-во: xMtaL1xx","depth":16,"bounds":{"left":0.4183843,"top":1.0,"width":0.04870346,"height":-0.012370348},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 06.05.2026 17:19","depth":16,"bounds":{"left":0.4183843,"top":1.0,"width":0.10621676,"height":-0.044293642},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Авт. код: 4VC9R6","depth":16,"bounds":{"left":0.4183843,"top":1.0,"width":0.032912236,"height":-0.058659196},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Номер на у-во: 80411471","depth":16,"bounds":{"left":0.4183843,"top":1.0,"width":0.04920213,"height":-0.07302475},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Общо","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Наредител/Получател: No sort applied, activate to apply an ascending sort","depth":14,"bounds":{"left":0.5309175,"top":0.43256184,"width":0.09740692,"height":0.056264963},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▲","depth":16,"bounds":{"left":0.62234044,"top":0.46368715,"width":0.0026595744,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"НАРЕДИТЕЛ/ПОЛУЧАТЕЛ","depth":16,"bounds":{"left":0.53424203,"top":0.46528333,"width":0.04936835,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▼","depth":16,"bounds":{"left":0.62234044,"top":0.47007182,"width":0.0026595744,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR","depth":15,"bounds":{"left":0.53424203,"top":0.69473267,"width":0.08843085,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BGR SOFIA CBA EKO MARKET","depth":15,"bounds":{"left":0.53424203,"top":0.75538707,"width":0.055851065,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POL BALICE Lagardere Travel R KR3","depth":15,"bounds":{"left":0.53424203,"top":0.8160415,"width":0.06798537,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SVK Nizna Dr Max 651 Nizna","depth":15,"bounds":{"left":0.53424203,"top":0.87669593,"width":0.053357713,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SVK TRSTENA LEK HORNOORAV NEM","depth":15,"bounds":{"left":0.53424203,"top":0.93735033,"width":0.0709774,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SVK ORAVSKY PODZA ORAVSKY HRAD","depth":15,"bounds":{"left":0.53424203,"top":0.9980048,"width":0.071476065,"height":0.0019952059},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BGR SOFIA TAXI 065","depth":15,"bounds":{"left":0.53424203,"top":1.0,"width":0.038065158,"height":-0.058659196},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Общо","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Номер сметка на наредителя / получателя: No sort applied, activate to apply an ascending sort","depth":14,"bounds":{"left":0.62832445,"top":0.43256184,"width":0.05651596,"height":0.056264963},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▲","depth":16,"bounds":{"left":0.6788564,"top":0.46368715,"width":0.0026595744,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"НОМЕР СМЕТКА НА НАРЕДИТЕЛЯ / ПОЛУЧАТЕЛЯ","depth":16,"bounds":{"left":0.63164896,"top":0.4405427,"width":0.037732713,"height":0.037110932},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▼","depth":16,"bounds":{"left":0.6788564,"top":0.47007182,"width":0.0026595744,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Общо","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Дебит: No sort applied, activate to apply an ascending sort","depth":14,"bounds":{"left":0.68484044,"top":0.43256184,"width":0.025598405,"height":0.056264963},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▲","depth":16,"bounds":{"left":0.7044548,"top":0.46368715,"width":0.0026595744,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДЕБИТ","depth":16,"bounds":{"left":0.6888298,"top":0.46528333,"width":0.013297873,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▼","depth":16,"bounds":{"left":0.7044548,"top":0.47007182,"width":0.0026595744,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.02","depth":15,"bounds":{"left":0.6984708,"top":0.51276934,"width":0.008643617,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15.46","depth":15,"bounds":{"left":0.6959774,"top":0.5734238,"width":0.011136968,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.04","depth":15,"bounds":{"left":0.6984708,"top":0.6340782,"width":0.008643617,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"67.81","depth":15,"bounds":{"left":0.6959774,"top":0.69473267,"width":0.011136968,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.51","depth":15,"bounds":{"left":0.6984708,"top":0.75538707,"width":0.008643617,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.49","depth":15,"bounds":{"left":0.6984708,"top":0.8160415,"width":0.008643617,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"24.27","depth":15,"bounds":{"left":0.6959774,"top":0.87669593,"width":0.011136968,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23.28","depth":15,"bounds":{"left":0.6959774,"top":0.93735033,"width":0.011136968,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18.00","depth":15,"bounds":{"left":0.6959774,"top":0.9980048,"width":0.011136968,"height":0.0019952059},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17.00","depth":15,"bounds":{"left":0.6959774,"top":1.0,"width":0.011136968,"height":-0.058659196},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"190.88","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCell","text":"Кредит: No sort applied, activate to apply an ascending sort","depth":14,"bounds":{"left":0.71043885,"top":0.43256184,"width":0.024933511,"height":0.056264963},"on_screen":true,"help_text":"","role_description":"cell","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▲","depth":16,"bounds":{"left":0.73271275,"top":0.46368715,"width":0.0026595744,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КРЕДИТ","depth":16,"bounds":{"left":0.7144282,"top":0.46528333,"width":0.015957447,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"▼","depth":16,"bounds":{"left":0.73271275,"top":0.47007182,"width":0.0026595744,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.00","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*Фиксиран курс за целите на двойно обозначение 1 EUR = 1.95583 BGN","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Потребителско ръководство - граждани","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Потребителско ръководство - граждани","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Общи условия за граждани","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Общи условия за граждани","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Тарифа за граждани","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Тарифа за граждани","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Call center:","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*2375","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0700 10 375","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Потребителско ръководство - фирми","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Потребителско ръководство - фирми","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Общи условия за фирми","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Общи условия за фирми","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Тарифа за фирми","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Тарифа за фирми","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BIC/SWIFT на Банка ДСК: STSABGSF ©","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026 on DAIS eBank .NET","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"www.dskdirect.bg/page/default.aspx?user_id=11309067&session_id=19d32dbc4b7511f19be7005056b08056qPz/DcUPDONnWIOWsLenTxdNOVxA8Ojp5X8xyKp62fgpRGSRqUQlYLh96t2cWeyEmh8FvVnTUtgNN-cAzQcZaw==U&xml_id=/bg-BG/01Individuals/02Accounts/04Movements/&c2s=AccountMovements&AccountMovements_action_mvc=ShowResultsAll","depth":5,"bounds":{"left":0.11502659,"top":0.9876297,"width":0.6281583,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8656928899634237073
|
7607516825821710099
|
click
|
accessibility
|
NULL
|
Pull requests · screenpipe/screenpipe · GitHub
Pul Pull requests · screenpipe/screenpipe · GitHub
Pull requests · screenpipe/screenpipe · GitHub
DNS / Nameservers | Hostinger
DNS / Nameservers | Hostinger
Nginx Proxy Manager
Nginx Proxy Manager
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
screenpipe/.claude/skills at main · screenpipe/screenpipe · GitHub
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Оптичен интернет за дома - EON телевизия | Vivacom | 5G
Оптичен интернет за дома - EON телевизия | Vivacom | 5G
AFFiNE - All In One KnowledgeOS
AFFiNE - All In One KnowledgeOS
All docs · AFFiNE
All docs · AFFiNE
Payments Logger
Payments Logger
[NirDiamant/GenAI_Agents] Add SwarmScore — Portable Trust Rating for AI Agents (Issue #115) - [EMAIL] - Gmail
[NirDiamant/GenAI_Agents] Add SwarmScore — Portable Trust Rating for AI Agents (Issue #115) - [EMAIL] - Gmail
New Tab
New Tab
Location Logger
Location Logger
Finance Hub
Finance Hub
Finance Hub
Finance Hub
Select: payments - db - Adminer
Select: payments - db - Adminer
Електронно банкиране ДСК Директ от Банка ДСК
Електронно банкиране ДСК Директ от Банка ДСК
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
LUKAS KOVALIK
1 Входяща поща
1
Входяща поща
Обратна връзка
Обратна връзка
English
English
Изход
Изход
СРЕДСТВА
СРЕДСТВА
КРЕДИТИ
КРЕДИТИ
КАРТИ
КАРТИ
БИТОВИ СМЕТКИ
БИТОВИ СМЕТКИ
ПРЕВОДИ
ПРЕВОДИ
СПЕСТЯВАНЕ
СПЕСТЯВАНЕ
ФОНДОВЕ
ФОНДОВЕ
ЗАЯВКИ
ЗАЯВКИ
ИЗВЕСТИЯ
ИЗВЕСТИЯ
СМАРТ ПРИЛОЖЕНИЯ
СМАРТ ПРИЛОЖЕНИЯ
НАСТРОЙКИ
НАСТРОЙКИ
С какво разполагам
С какво разполагам
Извлечения PDF
Извлечения PDF
Извлечения за период / месец
Извлечения за период / месец
Движения по сметки
Движения по сметки
Справка за IBAN
Справка за IBAN
Движения
Движения
Управление на бърз достъп до менюта.
Банков клиент
Сметка
Движения
Основание
Отсрещна страна - име
Отсрещна страна - сметка
Последните
Последните
10
За период от
За период от
09.05.2026
до
09.05.2026
Днес
Днес
От началото на месеца
От началото на месеца
От началото на годината
От началото на годината
Сума от
до
Експорт към файл
Покажи
Покажи
: No sort applied, sorting is disabled
Дата: No sort applied, activate to apply an ascending sort
▲
ДАТА
▼
Основание: No sort applied, activate to apply an ascending sort
▲
ОСНОВАНИЕ
▼
Наредител/Получател: No sort applied, activate to apply an ascending sort
▲
НАРЕДИТЕЛ/ПОЛУЧАТЕЛ
▼
Номер сметка на наредителя / получателя: No sort applied, activate to apply an ascending sort
▲
НОМЕР СМЕТКА НА НАРЕДИТЕЛЯ / ПОЛУЧАТЕЛЯ
▼
Дебит: No sort applied, activate to apply an ascending sort
▲
ДЕБИТ
▼
Кредит: No sort applied, activate to apply an ascending sort
▲
КРЕДИТ
▼
400915xxxxxx4447 ПОС 08.05.2026 18:46
Авт. код: 36C1UB
Блокирана до 22.06.2026
5.02
400915xxxxxx4447 ПОС 08.05.2026 18:36
Авт. код: 5CK9TB
Блокирана до 22.06.2026
15.46
400915xxxxxx4447 ПОС 08.05.2026 18:07
Авт. код: 8FK4TB
Блокирана до 22.06.2026
9.04
08.05.2026
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 08.05.2026 19:32
Авт. код: 6NM31C
Номер на у-во: V5411421
BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR
67.81
08.05.2026
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 07.05.2026 09:02
Авт. код: 7NE8N7
Номер на у-во: 10101446
BGR SOFIA CBA EKO MARKET
5.51
08.05.2026
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 06.05.2026 13:16
Авт. код: 1TV886
Номер на у-во: 06030191
POL BALICE Lagardere Travel R KR3
5.49
07.05.2026
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 05.05.2026 12:02
Авт. код: 9XC9W3
Номер на у-во: 10048984
SVK Nizna Dr Max 651 Nizna
24.27
07.05.2026
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 03.05.2026 12:50
Авт. код: 5K645Z
Номер на у-во: TV509902
SVK TRSTENA LEK HORNOORAV NEM
23.28
07.05.2026
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 04.05.2026 15:57
Авт. код: 2BU0F2
Номер на у-во: xMtaL1xx
SVK ORAVSKY PODZA ORAVSKY HRAD
18.00
07.05.2026
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 06.05.2026 17:19
Авт. код: 4VC9R6
Номер на у-во: 80411471
BGR SOFIA TAXI 065
17.00
Общо
190.88
0.00
: No sort applied, sorting is disabled
Общо
Дата: No sort applied, activate to apply an ascending sort
▲
ДАТА
▼
08.05.2026
08.05.2026
08.05.2026
07.05.2026
07.05.2026
07.05.2026
07.05.2026
Общо
Основание: No sort applied, activate to apply an ascending sort
▲
ОСНОВАНИЕ
▼
400915xxxxxx4447 ПОС 08.05.2026 18:46
Авт. код: 36C1UB
Блокирана до 22.06.2026
400915xxxxxx4447 ПОС 08.05.2026 18:36
Авт. код: 5CK9TB
Блокирана до 22.06.2026
400915xxxxxx4447 ПОС 08.05.2026 18:07
Авт. код: 8FK4TB
Блокирана до 22.06.2026
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 08.05.2026 19:32
Авт. код: 6NM31C
Номер на у-во: V5411421
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 07.05.2026 09:02
Авт. код: 7NE8N7
Номер на у-во: 10101446
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 06.05.2026 13:16
Авт. код: 1TV886
Номер на у-во: 06030191
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 05.05.2026 12:02
Авт. код: 9XC9W3
Номер на у-во: 10048984
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 03.05.2026 12:50
Авт. код: 5K645Z
Номер на у-во: TV509902
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 04.05.2026 15:57
Авт. код: 2BU0F2
Номер на у-во: xMtaL1xx
400915xxxxxx4447 ПЛАЩАНЕ НА ПОС 06.05.2026 17:19
Авт. код: 4VC9R6
Номер на у-во: 80411471
Общо
Наредител/Получател: No sort applied, activate to apply an ascending sort
▲
НАРЕДИТЕЛ/ПОЛУЧАТЕЛ
▼
BGR SOFIYA LIDL BALGARIYA EOOD UL TODOR
BGR SOFIA CBA EKO MARKET
POL BALICE Lagardere Travel R KR3
SVK Nizna Dr Max 651 Nizna
SVK TRSTENA LEK HORNOORAV NEM
SVK ORAVSKY PODZA ORAVSKY HRAD
BGR SOFIA TAXI 065
Общо
Номер сметка на наредителя / получателя: No sort applied, activate to apply an ascending sort
▲
НОМЕР СМЕТКА НА НАРЕДИТЕЛЯ / ПОЛУЧАТЕЛЯ
▼
Общо
Дебит: No sort applied, activate to apply an ascending sort
▲
ДЕБИТ
▼
5.02
15.46
9.04
67.81
5.51
5.49
24.27
23.28
18.00
17.00
190.88
Кредит: No sort applied, activate to apply an ascending sort
▲
КРЕДИТ
▼
0.00
*Фиксиран курс за целите на двойно обозначение 1 EUR = 1.95583 BGN
Потребителско ръководство - граждани
Потребителско ръководство - граждани
Общи условия за граждани
Общи условия за граждани
Тарифа за граждани
Тарифа за граждани
Call center:
*2375
0700 10 375
Потребителско ръководство - фирми
Потребителско ръководство - фирми
Общи условия за фирми
Общи условия за фирми
Тарифа за фирми
Тарифа за фирми
BIC/SWIFT на Банка ДСК: STSABGSF ©
2026 on DAIS eBank .NET
www.dskdirect.bg/page/default.aspx?user_id=11309067&session_id=19d32dbc4b7511f19be7005056b08056qPz/DcUPDONnWIOWsLenTxdNOVxA8Ojp5X8xyKp62fgpRGSRqUQlYLh96t2cWeyEmh8FvVnTUtgNN-cAzQcZaw==U&xml_id=/bg-BG/01Individuals/02Accounts/04Movements/&c2s=AccountMovements&AccountMovements_action_mvc=ShowResultsAll...
|
NULL
|
NULL
|
NULL
|
NULL
|