|
33629
|
677
|
43
|
2026-04-16T07:58:27.283735+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776326307283_m1.jpg...
|
Slack
|
jiminny-x-integration-app (Channel) - Jiminny Inc jiminny-x-integration-app (Channel) - Jiminny Inc - 2 new items - Slack...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
Directories
External connections
External connections
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
capture-tickets
confusion-clinic
curiosity_lab
engineering
frontend
general
infosec_internal_all
infra-changes
infrastructure_dev
jbu-team-info
jiminny-bg
platform-team
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Direct messages
Direct messages
Nikolay Ivanov
Aneliya Angelova
Vasil Vasilev
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Stoyan Tanev
Ves
Galya Dimitrova
Steliyan Georgiev
Adelina Petrova
,
Ilian Kyuchukov
,
Steliyan Georgiev
Adelina Petrova
Nikolay Nikolov
Toast
Jira Cloud
Unread mentions
Messages
Messages
Add canvas
Add canvas
Files
Files
Pins
Pins
Bookmarks
Bookmarks
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Stefka Stoyanova
May 23rd, 2025 at 4:03:45 PM
4:03 PM
Hi guys, to be honest we started using Integration.app as it was advertised as a universal model seamless of CRM specifics. Well, this wasn't the case for Zoho integration where 60-70% of the integration is our implementation of custom logic and for the rest we have issues with Integration.app exhausting CRM rate limits
Now, what I see for MS Dynamics is similar:
Stages are not populated for opportunities and leads, we need to use a separate endpoint to obtain them. Where is the universal model? My expectation is Integration.app to populate them and any additional logic to be wrapped in Integration.app in a cost-efficient manner without calling the CRM twice to obtain each opportunity or lead
There is no implementation for custom pipelines for leads and opportunities
We are assessing pros and cons of using Integration.app at all, meanwhile is there any chance to have actually the 'universal model' for the 2 things above for MS Dynamics?
+2
48 replies
Last reply 10 months ago
View thread
Jump to date
Integration Account
APP
Jun 2nd, 2025 at 3:41:58 PM
3:41 PM
Hey guys, I would like to ask for a little help with External API logs. I am not sure if it is some settings or if there is some new UI change, but I am unable to filter out by date or by failed requests. Previously it was something like this.
CleanShot 2025-06-02 at [EMAIL]
(610 kB)
image
CleanShot 2025-06-02 at [EMAIL]
https://assets.usepylon.com/aa7a9b9e-3ab2-4452-9b4b-c0f08dd94994%2F31759954-a46a-4cc7-a334-eefdac2a6cc8-CleanShot2025-06-02at15.40.37%25402x.png?Expires=253370764800&Signature=e-g6-VLd-38aT5M69DVcXy76tx6p3uWRxCcPJyfMqUeVnnXiphrTlw5HTiLVEEKDnISEa~0W~27It4fvfVCcslyfRugg35U8QfDpGwWL7M8716Ek8Ge3r5HOKnsYBzzVdCQHjyDZT6BBLqgQWzP4Aw1VWYblVM3QRDRDCje7Bj1wdwSACitHGQPx4sQezuOH1hg~VyR8xnDJjpkoSAEW7IvJ4OReMIWD4kqxeW4z4TtJmH9hZWI3puC7X8RfBwx4VKOWlw~8Vuk5GN78XKshjU41nF4KUMgxi3LMpLSTGN-TCKWemFXdp7a3NSm9mJ0IYqk9Y3eT2PZQfMj8KWIIuQ__&Key-Pair-Id=K3NV4LZ47N8M46
Open in new window
More actions
7 replies
Last reply 9 months ago
View thread
Jump to date
Lukas Kovalik
Jun 3rd, 2025 at 4:38:08 PM
4:38 PM
We have a couple of issues that need attention. I also include the pipeline - stage issue for visibility
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Jun 3rd, 2025 at 4:38:17 PM
4:38 PM
There appears to be a recent change in the SDK OAuth mechanism. When a new client connects to the platform using Zoho, we no longer receive a Promise (
https://console.integration.app/ref/sdk/classes/IntegrationAccessor.html#openNewConnection
https://console.integration.app/ref/sdk/classes/IntegrationAccessor.html#openNewConnection
) upon successful login. This functionality was working just a few weeks ago.
(edited)
Remove preview
console.integration.app
IntegrationAccessor | Integration App SDK - v1.11.4
IntegrationAccessor | Integration App SDK - v1.11.4
Documentation for Integration App SDK
29 replies
Last reply 10 months ago
View thread
React with white_check_mark
React with eyes
React with raised_hands...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Jiminny Inc","depth":12,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Jiminny (Staging)","depth":12,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Add workspaces","depth":12,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"role_description":"text"},{"role":"AXButton","text":"External connections","depth":20,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"External connections","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"capture-tickets","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"infosec_internal_all","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"infra-changes","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"infrastructure_dev","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"jbu-team-info","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"platform-team","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"support","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":21,"role_description":"text"},{"role":"AXButton","text":"Direct messages","depth":20,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Direct messages","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Ves","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Adelina Petrova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Ilian Kyuchukov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Adelina Petrova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":21,"role_description":"text"},{"role":"AXButton","text":"Unread mentions","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Messages","depth":17,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":19,"role_description":"text"},{"role":"AXRadioButton","text":"Add canvas","depth":18,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add canvas","depth":20,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":17,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":19,"role_description":"text"},{"role":"AXRadioButton","text":"Pins","depth":17,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Pins","depth":19,"role_description":"text"},{"role":"AXRadioButton","text":"Bookmarks","depth":17,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Bookmarks","depth":19,"role_description":"text"},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":17,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":17,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":22,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Stefka Stoyanova","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"May 23rd, 2025 at 4:03:45 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:03 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Hi guys, to be honest we started using Integration.app as it was advertised as a universal model seamless of CRM specifics. Well, this wasn't the case for Zoho integration where 60-70% of the integration is our implementation of custom logic and for the rest we have issues with Integration.app exhausting CRM rate limits","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Now, what I see for MS Dynamics is similar:","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"Stages are not populated for opportunities and leads, we need to use a separate endpoint to obtain them. Where is the universal model? My expectation is Integration.app to populate them and any additional logic to be wrapped in Integration.app in a cost-efficient manner without calling the CRM twice to obtain each opportunity or lead","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"There is no implementation for custom pipelines for leads and opportunities","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"We are assessing pros and cons of using Integration.app at all, meanwhile is there any chance to have actually the 'universal model' for the 2 things above for MS Dynamics?","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"+2","depth":24,"role_description":"text"},{"role":"AXButton","text":"48 replies","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Last reply 10 months ago","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"View thread","depth":24,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":22,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Integration Account","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"APP","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"Jun 2nd, 2025 at 3:41:58 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3:41 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Hey guys, I would like to ask for a little help with External API logs. I am not sure if it is some settings or if there is some new UI change, but I am unable to filter out by date or by failed requests. Previously it was something like this.","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"CleanShot 2025-06-02 at 15.40.37@2x.png","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"(610 kB)","depth":25,"role_description":"text"},{"role":"AXButton","text":"image","depth":25,"help_text":"collapse","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXLink","text":"CleanShot 2025-06-02 at 15.40.37@2x.png","depth":27,"help_text":"CleanShot 2025-06-02 at 15.40.37@2x.png","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"https://assets.usepylon.com/aa7a9b9e-3ab2-4452-9b4b-c0f08dd94994%2F31759954-a46a-4cc7-a334-eefdac2a6cc8-CleanShot2025-06-02at15.40.37%25402x.png?Expires=253370764800&Signature=e-g6-VLd-38aT5M69DVcXy76tx6p3uWRxCcPJyfMqUeVnnXiphrTlw5HTiLVEEKDnISEa~0W~27It4fvfVCcslyfRugg35U8QfDpGwWL7M8716Ek8Ge3r5HOKnsYBzzVdCQHjyDZT6BBLqgQWzP4Aw1VWYblVM3QRDRDCje7Bj1wdwSACitHGQPx4sQezuOH1hg~VyR8xnDJjpkoSAEW7IvJ4OReMIWD4kqxeW4z4TtJmH9hZWI3puC7X8RfBwx4VKOWlw~8Vuk5GN78XKshjU41nF4KUMgxi3LMpLSTGN-TCKWemFXdp7a3NSm9mJ0IYqk9Y3eT2PZQfMj8KWIIuQ__&Key-Pair-Id=K3NV4LZ47N8M46","depth":28,"role_description":"text"},{"role":"AXLink","text":"Open in new window","depth":28,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More actions","depth":28,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"7 replies","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Last reply 9 months ago","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"View thread","depth":24,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":22,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"Jun 3rd, 2025 at 4:38:08 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:38 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"We have a couple of issues that need attention. I also include the pipeline - stage issue for visibility","depth":24,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"Jun 3rd, 2025 at 4:38:17 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:38 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"There appears to be a recent change in the SDK OAuth mechanism. When a new client connects to the platform using Zoho, we no longer receive a Promise (","depth":25,"role_description":"text"},{"role":"AXLink","text":"https://console.integration.app/ref/sdk/classes/IntegrationAccessor.html#openNewConnection","depth":25,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"https://console.integration.app/ref/sdk/classes/IntegrationAccessor.html#openNewConnection","depth":26,"role_description":"text"},{"role":"AXStaticText","text":") upon successful login. This functionality was working just a few weeks ago.","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(edited)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Remove preview","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"console.integration.app","depth":25,"role_description":"text"},{"role":"AXLink","text":"IntegrationAccessor | Integration App SDK - v1.11.4","depth":25,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"IntegrationAccessor | Integration App SDK - v1.11.4","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"Documentation for Integration App SDK","depth":25,"role_description":"text"},{"role":"AXButton","text":"29 replies","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Last reply 10 months ago","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"View thread","depth":24,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"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,"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,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8828565542393636720
|
-4164915811902623638
|
click
|
hybrid
|
NULL
|
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
Directories
External connections
External connections
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
capture-tickets
confusion-clinic
curiosity_lab
engineering
frontend
general
infosec_internal_all
infra-changes
infrastructure_dev
jbu-team-info
jiminny-bg
platform-team
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Direct messages
Direct messages
Nikolay Ivanov
Aneliya Angelova
Vasil Vasilev
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Stoyan Tanev
Ves
Galya Dimitrova
Steliyan Georgiev
Adelina Petrova
,
Ilian Kyuchukov
,
Steliyan Georgiev
Adelina Petrova
Nikolay Nikolov
Toast
Jira Cloud
Unread mentions
Messages
Messages
Add canvas
Add canvas
Files
Files
Pins
Pins
Bookmarks
Bookmarks
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Stefka Stoyanova
May 23rd, 2025 at 4:03:45 PM
4:03 PM
Hi guys, to be honest we started using Integration.app as it was advertised as a universal model seamless of CRM specifics. Well, this wasn't the case for Zoho integration where 60-70% of the integration is our implementation of custom logic and for the rest we have issues with Integration.app exhausting CRM rate limits
Now, what I see for MS Dynamics is similar:
Stages are not populated for opportunities and leads, we need to use a separate endpoint to obtain them. Where is the universal model? My expectation is Integration.app to populate them and any additional logic to be wrapped in Integration.app in a cost-efficient manner without calling the CRM twice to obtain each opportunity or lead
There is no implementation for custom pipelines for leads and opportunities
We are assessing pros and cons of using Integration.app at all, meanwhile is there any chance to have actually the 'universal model' for the 2 things above for MS Dynamics?
+2
48 replies
Last reply 10 months ago
View thread
Jump to date
Integration Account
APP
Jun 2nd, 2025 at 3:41:58 PM
3:41 PM
Hey guys, I would like to ask for a little help with External API logs. I am not sure if it is some settings or if there is some new UI change, but I am unable to filter out by date or by failed requests. Previously it was something like this.
CleanShot 2025-06-02 at [EMAIL]
(610 kB)
image
CleanShot 2025-06-02 at [EMAIL]
https://assets.usepylon.com/aa7a9b9e-3ab2-4452-9b4b-c0f08dd94994%2F31759954-a46a-4cc7-a334-eefdac2a6cc8-CleanShot2025-06-02at15.40.37%25402x.png?Expires=253370764800&Signature=e-g6-VLd-38aT5M69DVcXy76tx6p3uWRxCcPJyfMqUeVnnXiphrTlw5HTiLVEEKDnISEa~0W~27It4fvfVCcslyfRugg35U8QfDpGwWL7M8716Ek8Ge3r5HOKnsYBzzVdCQHjyDZT6BBLqgQWzP4Aw1VWYblVM3QRDRDCje7Bj1wdwSACitHGQPx4sQezuOH1hg~VyR8xnDJjpkoSAEW7IvJ4OReMIWD4kqxeW4z4TtJmH9hZWI3puC7X8RfBwx4VKOWlw~8Vuk5GN78XKshjU41nF4KUMgxi3LMpLSTGN-TCKWemFXdp7a3NSm9mJ0IYqk9Y3eT2PZQfMj8KWIIuQ__&Key-Pair-Id=K3NV4LZ47N8M46
Open in new window
More actions
7 replies
Last reply 9 months ago
View thread
Jump to date
Lukas Kovalik
Jun 3rd, 2025 at 4:38:08 PM
4:38 PM
We have a couple of issues that need attention. I also include the pipeline - stage issue for visibility
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Jun 3rd, 2025 at 4:38:17 PM
4:38 PM
There appears to be a recent change in the SDK OAuth mechanism. When a new client connects to the platform using Zoho, we no longer receive a Promise (
https://console.integration.app/ref/sdk/classes/IntegrationAccessor.html#openNewConnection
https://console.integration.app/ref/sdk/classes/IntegrationAccessor.html#openNewConnection
) upon successful login. This functionality was working just a few weeks ago.
(edited)
Remove preview
console.integration.app
IntegrationAccessor | Integration App SDK - v1.11.4
IntegrationAccessor | Integration App SDK - v1.11.4
Documentation for Integration App SDK
29 replies
Last reply 10 months ago
View thread
React with white_check_mark
React with eyes
React with raised_hands
FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelpSupport Daily • in 4h 2 m100% C8Thu 16 Apr 10:58:26-zshDOCKER• ₴12026-04-16710:45:01.98163522026-04-16T10:45:05.035761Z2026-04-16T10:46:23.090024Z2026-04-16T10:46:26.132195Z2026-04-16T10:46:29.322057Z2026-04-16T10:46:38.234229Z2026-04-16T10:46:47.284407Z2026-04-16T10:46:56.326243Z2026-04-16T10:46:59.360561Z2026-04-16T10:48:22.094560Z\nFROM\nframes\nWHERE\nd-4.030937667s2026-04-16T10:48:22.094697Z2026-04-16T10:48:27.509002Z2026-04-16T10:48:32.602076Z2026-04-16T10:49:02.801442Z2026-04-16T10:49:17.859487Z2026-04-16T10:49:44.085292Z2026-04-16T10:49:44.088203Z2026-04-16T10:50:11.573614Z2026-04-16T10:50:11.574892Z2026-04-16T10:51:25.581511Z2026-04-16T10:51:29.527030Z2026-04-16T10:51:33.201063Z2026-04-16T10:51:57.237595Z2026-04-16T10:52:00.618858Z2026-04-16T10:53:33.489283Z2026-04-16T10:53:46.059596Z2026-04-16T10:53:52.475287Z2026-04-16T10:56:14.166792Z2026-04-16T10:56:17.065758Z2026-04-16T10:56:20.134540Z2026-04-16T10:56:23.139917Z2026-04-16T10:56:26.244357Z2026-04-16T10:56:27.562449Z2026-04-16T10:56:32.226001Z2026-04-16T10:56:35.318534Z2026-04-16T10:56:52.324157Z2026-04-16T10:56:55.329246Z2026-04-16T10:56:58.356364Z2026-04-16T10:57:01.432629Z2026-04-16T10:57:03.322854Z2026-04-16T10:57:10.706619Z2026-04-16T10:57:36.755032ZDEV (docker)APP (-zsh)*3ec2-user@ip-10-30-₴5-zsh86-zsh₴7* Unable to acce...O 88INFOscreenpipe__engine::event_driven_capture:contentdedup:skippingcapture for monitor 2trigger=visual_change)INFOINFOscreenpipe_engine::event_driven_capture:dedup:(hash=-394178939588870394,contentskippingcapture for monitor 2(hash=-394178939588870394,trigger=visual_change)screenpipe_engine::event_driven_capture:contentdedup:skippingcapture for monitor 2INFOscreenpipe_engine::event_driven_capture:contentdedup:skippingcapture for monitor 2Chash=7149945076322576258,trigger=visual_change)Chash=7149945076322576258,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture:contentdedup:skipping capture for monitor 2 (hash=7149945076322576258,INFOscreenpipe_engine::event_driven_capture:contentdedup:skippingcapture for monitor 2 (hash=7149945076322576258,trigger=visual_change)trigger=visual_change)INFOscreenpipe_engine::event_driven_capture:contentdedup:skippingcapture for monitor 2 (hash=7149945076322576258,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture:contentdedup:skipping capture for monitor 2 Chash=7149945076322576258,INFOscreenpipe_engine::event_driven_capture:contentskipping capture for monitor 2 Chash=7149945076322576258,trigger=visual_change)WARNsqlx::query:summary="SELECT id,dedup:snapshot_path,device_name,db.statement="\n\nSELECT\nid, \ntrigger=visual_change)snapshot_path, \ndevice_name, \ntimestampsnapshot_path IS NOT NULL\nAND timestamp< ?1\nORDER BY\ndevice_name, \ntimestamp ASC\nLIMIT\n5000\n'rows_affected=0 rows_returned=128elapseINFOscreenpipe_engine: :snapshot__compaction:snapshotcompaction:found 128 eligibleframesINFOscreenpipe.engine:: snapshot.compaction:snapshotcompaction: 63 frames,15.9MB → 7.9MB (2.0x), 63 JPEGs deletedINFOscreenpipe_engine::snapshot_compaction:snapshotcompaction: 63 frames,16.3MB+ 4.5MB (3.6x),63 JPEGs deletedINFOscreenpipe_engine::event_driven_capture:contentdedup:INFOscreenpipe_engine::event_driven_capture:contentdedup:skipping capture for monitor 1 (hash=6853170104847182325,trigger=visual_change)skippingcapture for monitor 1 (hash=594465382036229718, trigger=visual_change)INFOscreenpipe_engine::event_driven_capture:contentdedup:skipping capture for monitor 1(hash=594465382036229718, trigger=click)INFOINFOscreenpipe_engine::event_driven_capture:contentdedup:skipping capture for monitor 2 (hash=594465382036229718, trigger=click)screenpipe_engine::event_driven_capture:contentdedup:skippingcapture for monitor 2 (hash=-6964644011425770241, trigger=click)INFOscreenpipe_engine::event_driven_capture:content dedup:INFOskipping capture for monitor 1 (hash=-6964644011425770241, trigger=click)content dedup:INFOscreenpipe_engine::event_driven_capture:skipping capture for monitor 1 Chash=-2087341476805333889,trigger=visual_change)screenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 2 (hash=6317338798093569418,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture:contentdedup:skipping capture for monitor 1(hash=6317338798093569418,trigger=click)INFOscreenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 2INFOChash=-1884356785177423556,screenpipe_engine::event_driven_capture:contentdedup:skipping capture for monitor 2 (hash=-1884356785177423556,trigger=visual_change)trigger=visual_change)INFOscreenpipe_engine::snapshot_compaction:snapshotcompaction: found 109eligibleframesINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 61 frames,11.8MB → 6.0MB(2.0x), 61 JPEGs deletedINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 46 frames,13.1MB+ 1.5MB(8.6x),46 JPEGs deletedINFOscreenpipe_engine::event_driven_capture: contentdedup:skippingcapture for monitor 2 (hash=3616940803251985209,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 2 (hash=3616940803251985209,trigger=visual_change)INFOINFOscreenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 2 (hash=3616940803251985209,trigger=visual_change)screenpipe_engine::event_driven_capture:contentdedup:skippingcapture for monitor 2 (hash=3616940803251985209,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture:contentdedup:skipping capture for monitor 2 (hash=3616940803251985209,trigger=visual_change)INFOINFOscreenpipe_engine::event_driven_capture:content dedup:skipping capture for monitor 1 (hash=3616940803251985209,trigger=click)screenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 2INFOscreenpipe_engine:: event_driven_capture: contentdedup:Chash=3616940803251985209,trigger=visual_change)skippingcapture for monitor 2 (hash=3616940803251985209,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture:contentdedup:skipping capture for monitor 2 (hash=-1884356785177423556,INFOINFOscreenpipe_engine::event_driven_capture:contentdedup:skippingcapture for monitor 2 (hash=-1884356785177423556,trigger=visual_change)screenpipe_engine::event_driven_capture:contentdedup:skippingcapture for monitor 2 (hash=-1884356785177423556,trigger=visual_change)trigger=visual_change)INFOscreenpipe_engine::event_driven_capture:contentdedup:skippingcapture for monitor 2Chash=-1884356785177423556,trigger=visual_change)INFOINFOscreenpipe_engine::event_driven_capture:contentdedup:skipping capture for monitor 2 Chash=-1884356785177423556,trigger=click)screenpipe_engine::event_driven_capture:contentdedup:skipping capture for monitor 2 Chash=-1884356785177423556,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture:contentdedup:skipping capture for monitor 2 (hash=3616940803251985209, trigger=click)...
|
NULL
|
|
64454
|
1426
|
31
|
2026-04-21T11:13:21.636076+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776770001636_m2.jpg...
|
PhpStorm
|
faVsco.js – ReportNotGenerated.php
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\AutomatedReports;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
use Throwable;
class RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use Queueable;
private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';
private const int MIN_ACTIVITIES_COUNT = 1;
public int $tries = 2;
private ?AutomatedReportResult $reportResult = null;
public function __construct(private readonly string $reportUuid)
{
$this->onQueue(Constants::QUEUE_ANALYTICS);
}
public function uniqueId(): string
{
return $this->reportUuid;
}
public function handle(
AutomatedReportsService $reportService,
AskJiminnyReportActivityService $activityService,
ProphetClient $prophetClient,
LoggerInterface $logger,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
): void {
$logger->info(self::LOG_PREFIX . ' Started', [
'automatedReportUuid' => $this->reportUuid,
]);
try {
$automatedReport = $reportService->getReport($this->reportUuid);
if (! $this->validateReport($automatedReport, $logger)) {
return;
}
$creator = $automatedReport->getCreator();
if ($creator === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$savedSearch = $automatedReport->getSavedSearch();
if ($savedSearch === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$prompt = $automatedReport->getAskAnythingPrompt();
if ($prompt === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$this->reportResult = $reportService->getOrCreateReportResult(
automatedReport: $automatedReport,
data: [
'status' => AutomatedReportResult::STATUS_DEFAULT,
'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,
]
);
$activityIds = $activityService->getActivityIdsForSavedSearch(
savedSearch: $savedSearch,
user: $creator,
frequency: $automatedReport->getFrequency(),
);
$logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {
$this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);
$logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
$this->dispatchNotGeneratedNotifications(
$automatedReport,
$reportService,
$urlGenerator,
$jobDispatcher,
$logger,
);
return;
}
$payload = $reportService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $this->reportResult,
activityIds: $activityIds,
);
$this->reportResult->update([
'name' => $reportService->getReportFileName($this->reportResult),
'payload' => $payload,
'status' => AutomatedReportResult::STATUS_REQUESTED,
'requested_at' => Carbon::now()->toDateTimeString(),
]);
$logger->info(self::LOG_PREFIX . ' Request sent', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult->getUuid(),
'payload' => $payload,
]);
$response = $prophetClient->sendRequest(
endpoint: ProphetClient::ASK_JIMINNY_REPORT,
requestArray: $payload,
);
$logger->info(self::LOG_PREFIX . ' Response received', [
'response' => $response->getContent(),
]);
} catch (Throwable $exception) {
$reason = $exception instanceof ProphetException
? AutomatedReportResult::REASON_PROPHET_API_ERROR
: AutomatedReportResult::REASON_DEFAULT;
$this->failReport($reason);
$logger->error(self::LOG_PREFIX . ' Error', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult?->getUuid(),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
if ($this->attempts() < $this->tries) {
$logger->info(self::LOG_PREFIX . ' Retry scheduled', [
'attempts' => $this->attempts(),
]);
$this->release(30);
} else {
$this->fail($exception);
}
}
}
private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool
{
if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {
$logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [
'automatedReportUuid' => $this->reportUuid,
'type' => $automatedReport->getType(),
]);
return false;
}
if (! $automatedReport->getStatus()) {
$logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {
$logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
return true;
}
private function failReport(int $reason): void
{
$this->reportResult?->update([
'status' => AutomatedReportResult::STATUS_FAILED,
'reason' => $reason,
]);
}
private function dispatchNotGeneratedNotifications(
AutomatedReport $automatedReport,
AutomatedReportsService $reportService,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
LoggerInterface $logger,
): void {
if ($this->reportResult === null) {
return;
}
$recipients = $reportService->getValidRecipientUsers($automatedReport);
if (empty($recipients)) {
$logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$reportName = $automatedReport->getCustomName()
?: $reportService->getReportTypeName($this->reportResult);
$periodName = $reportService->getReportPeriodName($this->reportResult);
$reportsPageUrl = $urlGenerator->route('ai.reports.show');
foreach ($recipients as $recipient) {
$jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(
reportUuid: $this->reportResult->getUuid(),
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
reportName: $reportName,
periodName: $periodName,
reportsPageUrl: $reportsPageUrl,
));
}
$logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [
'automatedReportUuid' => $this->reportUuid,
'recipientsCount' => count($recipients),
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Mail\Reports;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Jiminny\Mail\Mailable;
class ReportNotGenerated extends Mailable implements ShouldQueue
{
use Queueable;
use SerializesModels;
public function __construct(
private readonly string $reportName,
private readonly string $periodName,
private readonly string $reportsPageUrl,
private readonly string $mailSubject,
) {
}
public function build(): Mailable
{
$logoCDN = config('logos.cdn.header');
$fullLogoCDN = config('logos.cdn.footer');
$fromAddress = config('mail.from.address');
if (config('jiminny.deploy_region') === 'eu') {
$fromAddress = '[EMAIL]';
}
return $this
->from($fromAddress, config('mail.from.name'))
->view('emails.reports.report-not-generated', [
'reportName' => $this->reportName,
'periodName' => $this->periodName,
'reportsPageUrl' => $this->reportsPageUrl,
'isReport' => true,
'headerLogoCdn' => $logoCDN,
'footerLogoCdn' => $fullLogoCDN,
])
->subject($this->mailSubject);
}
}
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},"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.12732713,"height":0.025538707},"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"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},"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},"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},"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},"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},"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},"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},"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},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\AutomatedReports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\ProphetAi\\Exceptions\\ProphetException;\nuse Jiminny\\Component\\ProphetAi\\ProphetClient;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\nuse Throwable;\n\nclass RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use Queueable;\n\n private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';\n\n private const int MIN_ACTIVITIES_COUNT = 1;\n\n public int $tries = 2;\n\n private ?AutomatedReportResult $reportResult = null;\n\n public function __construct(private readonly string $reportUuid)\n {\n $this->onQueue(Constants::QUEUE_ANALYTICS);\n }\n\n public function uniqueId(): string\n {\n return $this->reportUuid;\n }\n\n public function handle(\n AutomatedReportsService $reportService,\n AskJiminnyReportActivityService $activityService,\n ProphetClient $prophetClient,\n LoggerInterface $logger,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n ): void {\n $logger->info(self::LOG_PREFIX . ' Started', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n try {\n $automatedReport = $reportService->getReport($this->reportUuid);\n\n if (! $this->validateReport($automatedReport, $logger)) {\n return;\n }\n\n $creator = $automatedReport->getCreator();\n if ($creator === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $savedSearch = $automatedReport->getSavedSearch();\n if ($savedSearch === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $prompt = $automatedReport->getAskAnythingPrompt();\n if ($prompt === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $this->reportResult = $reportService->getOrCreateReportResult(\n automatedReport: $automatedReport,\n data: [\n 'status' => AutomatedReportResult::STATUS_DEFAULT,\n 'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,\n ]\n );\n\n $activityIds = $activityService->getActivityIdsForSavedSearch(\n savedSearch: $savedSearch,\n user: $creator,\n frequency: $automatedReport->getFrequency(),\n );\n\n $logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {\n $this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);\n\n $logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n $this->dispatchNotGeneratedNotifications(\n $automatedReport,\n $reportService,\n $urlGenerator,\n $jobDispatcher,\n $logger,\n );\n\n return;\n }\n\n $payload = $reportService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $this->reportResult,\n activityIds: $activityIds,\n );\n\n $this->reportResult->update([\n 'name' => $reportService->getReportFileName($this->reportResult),\n 'payload' => $payload,\n 'status' => AutomatedReportResult::STATUS_REQUESTED,\n 'requested_at' => Carbon::now()->toDateTimeString(),\n ]);\n\n $logger->info(self::LOG_PREFIX . ' Request sent', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult->getUuid(),\n 'payload' => $payload,\n ]);\n\n $response = $prophetClient->sendRequest(\n endpoint: ProphetClient::ASK_JIMINNY_REPORT,\n requestArray: $payload,\n );\n\n $logger->info(self::LOG_PREFIX . ' Response received', [\n 'response' => $response->getContent(),\n ]);\n } catch (Throwable $exception) {\n $reason = $exception instanceof ProphetException\n ? AutomatedReportResult::REASON_PROPHET_API_ERROR\n : AutomatedReportResult::REASON_DEFAULT;\n\n $this->failReport($reason);\n\n $logger->error(self::LOG_PREFIX . ' Error', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult?->getUuid(),\n 'code' => $exception->getCode(),\n 'message' => $exception->getMessage(),\n ]);\n\n if ($this->attempts() < $this->tries) {\n $logger->info(self::LOG_PREFIX . ' Retry scheduled', [\n 'attempts' => $this->attempts(),\n ]);\n\n $this->release(30);\n } else {\n $this->fail($exception);\n }\n }\n }\n\n private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool\n {\n if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [\n 'automatedReportUuid' => $this->reportUuid,\n 'type' => $automatedReport->getType(),\n ]);\n\n return false;\n }\n\n if (! $automatedReport->getStatus()) {\n $logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {\n $logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n return true;\n }\n\n private function failReport(int $reason): void\n {\n $this->reportResult?->update([\n 'status' => AutomatedReportResult::STATUS_FAILED,\n 'reason' => $reason,\n ]);\n }\n\n private function dispatchNotGeneratedNotifications(\n AutomatedReport $automatedReport,\n AutomatedReportsService $reportService,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n LoggerInterface $logger,\n ): void {\n if ($this->reportResult === null) {\n return;\n }\n\n $recipients = $reportService->getValidRecipientUsers($automatedReport);\n if (empty($recipients)) {\n $logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $reportName = $automatedReport->getCustomName()\n ?: $reportService->getReportTypeName($this->reportResult);\n $periodName = $reportService->getReportPeriodName($this->reportResult);\n $reportsPageUrl = $urlGenerator->route('ai.reports.show');\n\n foreach ($recipients as $recipient) {\n $jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(\n reportUuid: $this->reportResult->getUuid(),\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n reportName: $reportName,\n periodName: $periodName,\n reportsPageUrl: $reportsPageUrl,\n ));\n }\n\n $logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [\n 'automatedReportUuid' => $this->reportUuid,\n 'recipientsCount' => count($recipients),\n ]);\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\AutomatedReports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\ProphetAi\\Exceptions\\ProphetException;\nuse Jiminny\\Component\\ProphetAi\\ProphetClient;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\nuse Throwable;\n\nclass RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use Queueable;\n\n private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';\n\n private const int MIN_ACTIVITIES_COUNT = 1;\n\n public int $tries = 2;\n\n private ?AutomatedReportResult $reportResult = null;\n\n public function __construct(private readonly string $reportUuid)\n {\n $this->onQueue(Constants::QUEUE_ANALYTICS);\n }\n\n public function uniqueId(): string\n {\n return $this->reportUuid;\n }\n\n public function handle(\n AutomatedReportsService $reportService,\n AskJiminnyReportActivityService $activityService,\n ProphetClient $prophetClient,\n LoggerInterface $logger,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n ): void {\n $logger->info(self::LOG_PREFIX . ' Started', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n try {\n $automatedReport = $reportService->getReport($this->reportUuid);\n\n if (! $this->validateReport($automatedReport, $logger)) {\n return;\n }\n\n $creator = $automatedReport->getCreator();\n if ($creator === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $savedSearch = $automatedReport->getSavedSearch();\n if ($savedSearch === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $prompt = $automatedReport->getAskAnythingPrompt();\n if ($prompt === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $this->reportResult = $reportService->getOrCreateReportResult(\n automatedReport: $automatedReport,\n data: [\n 'status' => AutomatedReportResult::STATUS_DEFAULT,\n 'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,\n ]\n );\n\n $activityIds = $activityService->getActivityIdsForSavedSearch(\n savedSearch: $savedSearch,\n user: $creator,\n frequency: $automatedReport->getFrequency(),\n );\n\n $logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {\n $this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);\n\n $logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n $this->dispatchNotGeneratedNotifications(\n $automatedReport,\n $reportService,\n $urlGenerator,\n $jobDispatcher,\n $logger,\n );\n\n return;\n }\n\n $payload = $reportService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $this->reportResult,\n activityIds: $activityIds,\n );\n\n $this->reportResult->update([\n 'name' => $reportService->getReportFileName($this->reportResult),\n 'payload' => $payload,\n 'status' => AutomatedReportResult::STATUS_REQUESTED,\n 'requested_at' => Carbon::now()->toDateTimeString(),\n ]);\n\n $logger->info(self::LOG_PREFIX . ' Request sent', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult->getUuid(),\n 'payload' => $payload,\n ]);\n\n $response = $prophetClient->sendRequest(\n endpoint: ProphetClient::ASK_JIMINNY_REPORT,\n requestArray: $payload,\n );\n\n $logger->info(self::LOG_PREFIX . ' Response received', [\n 'response' => $response->getContent(),\n ]);\n } catch (Throwable $exception) {\n $reason = $exception instanceof ProphetException\n ? AutomatedReportResult::REASON_PROPHET_API_ERROR\n : AutomatedReportResult::REASON_DEFAULT;\n\n $this->failReport($reason);\n\n $logger->error(self::LOG_PREFIX . ' Error', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult?->getUuid(),\n 'code' => $exception->getCode(),\n 'message' => $exception->getMessage(),\n ]);\n\n if ($this->attempts() < $this->tries) {\n $logger->info(self::LOG_PREFIX . ' Retry scheduled', [\n 'attempts' => $this->attempts(),\n ]);\n\n $this->release(30);\n } else {\n $this->fail($exception);\n }\n }\n }\n\n private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool\n {\n if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [\n 'automatedReportUuid' => $this->reportUuid,\n 'type' => $automatedReport->getType(),\n ]);\n\n return false;\n }\n\n if (! $automatedReport->getStatus()) {\n $logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {\n $logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n return true;\n }\n\n private function failReport(int $reason): void\n {\n $this->reportResult?->update([\n 'status' => AutomatedReportResult::STATUS_FAILED,\n 'reason' => $reason,\n ]);\n }\n\n private function dispatchNotGeneratedNotifications(\n AutomatedReport $automatedReport,\n AutomatedReportsService $reportService,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n LoggerInterface $logger,\n ): void {\n if ($this->reportResult === null) {\n return;\n }\n\n $recipients = $reportService->getValidRecipientUsers($automatedReport);\n if (empty($recipients)) {\n $logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $reportName = $automatedReport->getCustomName()\n ?: $reportService->getReportTypeName($this->reportResult);\n $periodName = $reportService->getReportPeriodName($this->reportResult);\n $reportsPageUrl = $urlGenerator->route('ai.reports.show');\n\n foreach ($recipients as $recipient) {\n $jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(\n reportUuid: $this->reportResult->getUuid(),\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n reportName: $reportName,\n periodName: $periodName,\n reportsPageUrl: $reportsPageUrl,\n ));\n }\n\n $logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [\n 'automatedReportUuid' => $this->reportUuid,\n 'recipientsCount' => count($recipients),\n ]);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"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},"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},"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},"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\\Mail\\Reports;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Jiminny\\Mail\\Mailable;\n\nclass ReportNotGenerated extends Mailable implements ShouldQueue\n{\n use Queueable;\n use SerializesModels;\n\n public function __construct(\n private readonly string $reportName,\n private readonly string $periodName,\n private readonly string $reportsPageUrl,\n private readonly string $mailSubject,\n ) {\n }\n\n public function build(): Mailable\n {\n $logoCDN = config('logos.cdn.header');\n $fullLogoCDN = config('logos.cdn.footer');\n\n $fromAddress = config('mail.from.address');\n if (config('jiminny.deploy_region') === 'eu') {\n $fromAddress = 'no-reply@jiminny.com';\n }\n\n return $this\n ->from($fromAddress, config('mail.from.name'))\n ->view('emails.reports.report-not-generated', [\n 'reportName' => $this->reportName,\n 'periodName' => $this->periodName,\n 'reportsPageUrl' => $this->reportsPageUrl,\n 'isReport' => true,\n 'headerLogoCdn' => $logoCDN,\n 'footerLogoCdn' => $fullLogoCDN,\n ])\n ->subject($this->mailSubject);\n }\n}","depth":4,"bounds":{"left":0.40425533,"top":0.12210695,"width":0.2862367,"height":0.85714287},"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Mail\\Reports;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Jiminny\\Mail\\Mailable;\n\nclass ReportNotGenerated extends Mailable implements ShouldQueue\n{\n use Queueable;\n use SerializesModels;\n\n public function __construct(\n private readonly string $reportName,\n private readonly string $periodName,\n private readonly string $reportsPageUrl,\n private readonly string $mailSubject,\n ) {\n }\n\n public function build(): Mailable\n {\n $logoCDN = config('logos.cdn.header');\n $fullLogoCDN = config('logos.cdn.footer');\n\n $fromAddress = config('mail.from.address');\n if (config('jiminny.deploy_region') === 'eu') {\n $fromAddress = 'no-reply@jiminny.com';\n }\n\n return $this\n ->from($fromAddress, config('mail.from.name'))\n ->view('emails.reports.report-not-generated', [\n 'reportName' => $this->reportName,\n 'periodName' => $this->periodName,\n 'reportsPageUrl' => $this->reportsPageUrl,\n 'isReport' => true,\n 'headerLogoCdn' => $logoCDN,\n 'footerLogoCdn' => $fullLogoCDN,\n ])\n ->subject($this->mailSubject);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"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.06715426,"top":0.05027933,"width":0.008643617,"height":0.01915403},"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.078125,"top":0.05027933,"width":0.008643617,"height":0.01915403},"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.08676862,"top":0.05027933,"width":0.008643617,"height":0.01915403},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.09541223,"top":0.05027933,"width":0.008643617,"height":0.01915403},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.10405585,"top":0.05027933,"width":0.008643617,"height":0.01915403},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8828084800201052505
|
-787814697458742428
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\AutomatedReports;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
use Throwable;
class RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use Queueable;
private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';
private const int MIN_ACTIVITIES_COUNT = 1;
public int $tries = 2;
private ?AutomatedReportResult $reportResult = null;
public function __construct(private readonly string $reportUuid)
{
$this->onQueue(Constants::QUEUE_ANALYTICS);
}
public function uniqueId(): string
{
return $this->reportUuid;
}
public function handle(
AutomatedReportsService $reportService,
AskJiminnyReportActivityService $activityService,
ProphetClient $prophetClient,
LoggerInterface $logger,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
): void {
$logger->info(self::LOG_PREFIX . ' Started', [
'automatedReportUuid' => $this->reportUuid,
]);
try {
$automatedReport = $reportService->getReport($this->reportUuid);
if (! $this->validateReport($automatedReport, $logger)) {
return;
}
$creator = $automatedReport->getCreator();
if ($creator === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$savedSearch = $automatedReport->getSavedSearch();
if ($savedSearch === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$prompt = $automatedReport->getAskAnythingPrompt();
if ($prompt === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$this->reportResult = $reportService->getOrCreateReportResult(
automatedReport: $automatedReport,
data: [
'status' => AutomatedReportResult::STATUS_DEFAULT,
'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,
]
);
$activityIds = $activityService->getActivityIdsForSavedSearch(
savedSearch: $savedSearch,
user: $creator,
frequency: $automatedReport->getFrequency(),
);
$logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {
$this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);
$logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
$this->dispatchNotGeneratedNotifications(
$automatedReport,
$reportService,
$urlGenerator,
$jobDispatcher,
$logger,
);
return;
}
$payload = $reportService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $this->reportResult,
activityIds: $activityIds,
);
$this->reportResult->update([
'name' => $reportService->getReportFileName($this->reportResult),
'payload' => $payload,
'status' => AutomatedReportResult::STATUS_REQUESTED,
'requested_at' => Carbon::now()->toDateTimeString(),
]);
$logger->info(self::LOG_PREFIX . ' Request sent', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult->getUuid(),
'payload' => $payload,
]);
$response = $prophetClient->sendRequest(
endpoint: ProphetClient::ASK_JIMINNY_REPORT,
requestArray: $payload,
);
$logger->info(self::LOG_PREFIX . ' Response received', [
'response' => $response->getContent(),
]);
} catch (Throwable $exception) {
$reason = $exception instanceof ProphetException
? AutomatedReportResult::REASON_PROPHET_API_ERROR
: AutomatedReportResult::REASON_DEFAULT;
$this->failReport($reason);
$logger->error(self::LOG_PREFIX . ' Error', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult?->getUuid(),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
if ($this->attempts() < $this->tries) {
$logger->info(self::LOG_PREFIX . ' Retry scheduled', [
'attempts' => $this->attempts(),
]);
$this->release(30);
} else {
$this->fail($exception);
}
}
}
private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool
{
if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {
$logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [
'automatedReportUuid' => $this->reportUuid,
'type' => $automatedReport->getType(),
]);
return false;
}
if (! $automatedReport->getStatus()) {
$logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {
$logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
return true;
}
private function failReport(int $reason): void
{
$this->reportResult?->update([
'status' => AutomatedReportResult::STATUS_FAILED,
'reason' => $reason,
]);
}
private function dispatchNotGeneratedNotifications(
AutomatedReport $automatedReport,
AutomatedReportsService $reportService,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
LoggerInterface $logger,
): void {
if ($this->reportResult === null) {
return;
}
$recipients = $reportService->getValidRecipientUsers($automatedReport);
if (empty($recipients)) {
$logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$reportName = $automatedReport->getCustomName()
?: $reportService->getReportTypeName($this->reportResult);
$periodName = $reportService->getReportPeriodName($this->reportResult);
$reportsPageUrl = $urlGenerator->route('ai.reports.show');
foreach ($recipients as $recipient) {
$jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(
reportUuid: $this->reportResult->getUuid(),
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
reportName: $reportName,
periodName: $periodName,
reportsPageUrl: $reportsPageUrl,
));
}
$logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [
'automatedReportUuid' => $this->reportUuid,
'recipientsCount' => count($recipients),
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Mail\Reports;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Jiminny\Mail\Mailable;
class ReportNotGenerated extends Mailable implements ShouldQueue
{
use Queueable;
use SerializesModels;
public function __construct(
private readonly string $reportName,
private readonly string $periodName,
private readonly string $reportsPageUrl,
private readonly string $mailSubject,
) {
}
public function build(): Mailable
{
$logoCDN = config('logos.cdn.header');
$fullLogoCDN = config('logos.cdn.footer');
$fromAddress = config('mail.from.address');
if (config('jiminny.deploy_region') === 'eu') {
$fromAddress = '[EMAIL]';
}
return $this
->from($fromAddress, config('mail.from.name'))
->view('emails.reports.report-not-generated', [
'reportName' => $this->reportName,
'periodName' => $this->periodName,
'reportsPageUrl' => $this->reportsPageUrl,
'isReport' => true,
'headerLogoCdn' => $logoCDN,
'footerLogoCdn' => $fullLogoCDN,
])
->subject($this->mailSubject);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
64452
|
|
64455
|
1425
|
26
|
2026-04-21T11:13:27.140523+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776770007140_m1.jpg...
|
PhpStorm
|
faVsco.js – ReportNotGenerated.php
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\AutomatedReports;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
use Throwable;
class RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use Queueable;
private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';
private const int MIN_ACTIVITIES_COUNT = 1;
public int $tries = 2;
private ?AutomatedReportResult $reportResult = null;
public function __construct(private readonly string $reportUuid)
{
$this->onQueue(Constants::QUEUE_ANALYTICS);
}
public function uniqueId(): string
{
return $this->reportUuid;
}
public function handle(
AutomatedReportsService $reportService,
AskJiminnyReportActivityService $activityService,
ProphetClient $prophetClient,
LoggerInterface $logger,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
): void {
$logger->info(self::LOG_PREFIX . ' Started', [
'automatedReportUuid' => $this->reportUuid,
]);
try {
$automatedReport = $reportService->getReport($this->reportUuid);
if (! $this->validateReport($automatedReport, $logger)) {
return;
}
$creator = $automatedReport->getCreator();
if ($creator === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$savedSearch = $automatedReport->getSavedSearch();
if ($savedSearch === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$prompt = $automatedReport->getAskAnythingPrompt();
if ($prompt === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$this->reportResult = $reportService->getOrCreateReportResult(
automatedReport: $automatedReport,
data: [
'status' => AutomatedReportResult::STATUS_DEFAULT,
'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,
]
);
$activityIds = $activityService->getActivityIdsForSavedSearch(
savedSearch: $savedSearch,
user: $creator,
frequency: $automatedReport->getFrequency(),
);
$logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {
$this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);
$logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
$this->dispatchNotGeneratedNotifications(
$automatedReport,
$reportService,
$urlGenerator,
$jobDispatcher,
$logger,
);
return;
}
$payload = $reportService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $this->reportResult,
activityIds: $activityIds,
);
$this->reportResult->update([
'name' => $reportService->getReportFileName($this->reportResult),
'payload' => $payload,
'status' => AutomatedReportResult::STATUS_REQUESTED,
'requested_at' => Carbon::now()->toDateTimeString(),
]);
$logger->info(self::LOG_PREFIX . ' Request sent', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult->getUuid(),
'payload' => $payload,
]);
$response = $prophetClient->sendRequest(
endpoint: ProphetClient::ASK_JIMINNY_REPORT,
requestArray: $payload,
);
$logger->info(self::LOG_PREFIX . ' Response received', [
'response' => $response->getContent(),
]);
} catch (Throwable $exception) {
$reason = $exception instanceof ProphetException
? AutomatedReportResult::REASON_PROPHET_API_ERROR
: AutomatedReportResult::REASON_DEFAULT;
$this->failReport($reason);
$logger->error(self::LOG_PREFIX . ' Error', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult?->getUuid(),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
if ($this->attempts() < $this->tries) {
$logger->info(self::LOG_PREFIX . ' Retry scheduled', [
'attempts' => $this->attempts(),
]);
$this->release(30);
} else {
$this->fail($exception);
}
}
}
private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool
{
if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {
$logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [
'automatedReportUuid' => $this->reportUuid,
'type' => $automatedReport->getType(),
]);
return false;
}
if (! $automatedReport->getStatus()) {
$logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {
$logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
return true;
}
private function failReport(int $reason): void
{
$this->reportResult?->update([
'status' => AutomatedReportResult::STATUS_FAILED,
'reason' => $reason,
]);
}
private function dispatchNotGeneratedNotifications(
AutomatedReport $automatedReport,
AutomatedReportsService $reportService,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
LoggerInterface $logger,
): void {
if ($this->reportResult === null) {
return;
}
$recipients = $reportService->getValidRecipientUsers($automatedReport);
if (empty($recipients)) {
$logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$reportName = $automatedReport->getCustomName()
?: $reportService->getReportTypeName($this->reportResult);
$periodName = $reportService->getReportPeriodName($this->reportResult);
$reportsPageUrl = $urlGenerator->route('ai.reports.show');
foreach ($recipients as $recipient) {
$jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(
reportUuid: $this->reportResult->getUuid(),
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
reportName: $reportName,
periodName: $periodName,
reportsPageUrl: $reportsPageUrl,
));
}
$logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [
'automatedReportUuid' => $this->reportUuid,
'recipientsCount' => count($recipients),
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Mail\Reports;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Jiminny\Mail\Mailable;
class ReportNotGenerated extends Mailable implements ShouldQueue
{
use Queueable;
use SerializesModels;
public function __construct(
private readonly string $reportName,
private readonly string $periodName,
private readonly string $reportsPageUrl,
private readonly string $mailSubject,
) {
}
public function build(): Mailable
{
$logoCDN = config('logos.cdn.header');
$fullLogoCDN = config('logos.cdn.footer');
$fromAddress = config('mail.from.address');
if (config('jiminny.deploy_region') === 'eu') {
$fromAddress = '[EMAIL]';
}
return $this
->from($fromAddress, config('mail.from.name'))
->view('emails.reports.report-not-generated', [
'reportName' => $this->reportName,
'periodName' => $this->periodName,
'reportsPageUrl' => $this->reportsPageUrl,
'isReport' => true,
'headerLogoCdn' => $logoCDN,
'footerLogoCdn' => $fullLogoCDN,
])
->subject($this->mailSubject);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"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},"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},"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},"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},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\AutomatedReports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\ProphetAi\\Exceptions\\ProphetException;\nuse Jiminny\\Component\\ProphetAi\\ProphetClient;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\nuse Throwable;\n\nclass RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use Queueable;\n\n private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';\n\n private const int MIN_ACTIVITIES_COUNT = 1;\n\n public int $tries = 2;\n\n private ?AutomatedReportResult $reportResult = null;\n\n public function __construct(private readonly string $reportUuid)\n {\n $this->onQueue(Constants::QUEUE_ANALYTICS);\n }\n\n public function uniqueId(): string\n {\n return $this->reportUuid;\n }\n\n public function handle(\n AutomatedReportsService $reportService,\n AskJiminnyReportActivityService $activityService,\n ProphetClient $prophetClient,\n LoggerInterface $logger,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n ): void {\n $logger->info(self::LOG_PREFIX . ' Started', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n try {\n $automatedReport = $reportService->getReport($this->reportUuid);\n\n if (! $this->validateReport($automatedReport, $logger)) {\n return;\n }\n\n $creator = $automatedReport->getCreator();\n if ($creator === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $savedSearch = $automatedReport->getSavedSearch();\n if ($savedSearch === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $prompt = $automatedReport->getAskAnythingPrompt();\n if ($prompt === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $this->reportResult = $reportService->getOrCreateReportResult(\n automatedReport: $automatedReport,\n data: [\n 'status' => AutomatedReportResult::STATUS_DEFAULT,\n 'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,\n ]\n );\n\n $activityIds = $activityService->getActivityIdsForSavedSearch(\n savedSearch: $savedSearch,\n user: $creator,\n frequency: $automatedReport->getFrequency(),\n );\n\n $logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {\n $this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);\n\n $logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n $this->dispatchNotGeneratedNotifications(\n $automatedReport,\n $reportService,\n $urlGenerator,\n $jobDispatcher,\n $logger,\n );\n\n return;\n }\n\n $payload = $reportService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $this->reportResult,\n activityIds: $activityIds,\n );\n\n $this->reportResult->update([\n 'name' => $reportService->getReportFileName($this->reportResult),\n 'payload' => $payload,\n 'status' => AutomatedReportResult::STATUS_REQUESTED,\n 'requested_at' => Carbon::now()->toDateTimeString(),\n ]);\n\n $logger->info(self::LOG_PREFIX . ' Request sent', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult->getUuid(),\n 'payload' => $payload,\n ]);\n\n $response = $prophetClient->sendRequest(\n endpoint: ProphetClient::ASK_JIMINNY_REPORT,\n requestArray: $payload,\n );\n\n $logger->info(self::LOG_PREFIX . ' Response received', [\n 'response' => $response->getContent(),\n ]);\n } catch (Throwable $exception) {\n $reason = $exception instanceof ProphetException\n ? AutomatedReportResult::REASON_PROPHET_API_ERROR\n : AutomatedReportResult::REASON_DEFAULT;\n\n $this->failReport($reason);\n\n $logger->error(self::LOG_PREFIX . ' Error', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult?->getUuid(),\n 'code' => $exception->getCode(),\n 'message' => $exception->getMessage(),\n ]);\n\n if ($this->attempts() < $this->tries) {\n $logger->info(self::LOG_PREFIX . ' Retry scheduled', [\n 'attempts' => $this->attempts(),\n ]);\n\n $this->release(30);\n } else {\n $this->fail($exception);\n }\n }\n }\n\n private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool\n {\n if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [\n 'automatedReportUuid' => $this->reportUuid,\n 'type' => $automatedReport->getType(),\n ]);\n\n return false;\n }\n\n if (! $automatedReport->getStatus()) {\n $logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {\n $logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n return true;\n }\n\n private function failReport(int $reason): void\n {\n $this->reportResult?->update([\n 'status' => AutomatedReportResult::STATUS_FAILED,\n 'reason' => $reason,\n ]);\n }\n\n private function dispatchNotGeneratedNotifications(\n AutomatedReport $automatedReport,\n AutomatedReportsService $reportService,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n LoggerInterface $logger,\n ): void {\n if ($this->reportResult === null) {\n return;\n }\n\n $recipients = $reportService->getValidRecipientUsers($automatedReport);\n if (empty($recipients)) {\n $logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $reportName = $automatedReport->getCustomName()\n ?: $reportService->getReportTypeName($this->reportResult);\n $periodName = $reportService->getReportPeriodName($this->reportResult);\n $reportsPageUrl = $urlGenerator->route('ai.reports.show');\n\n foreach ($recipients as $recipient) {\n $jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(\n reportUuid: $this->reportResult->getUuid(),\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n reportName: $reportName,\n periodName: $periodName,\n reportsPageUrl: $reportsPageUrl,\n ));\n }\n\n $logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [\n 'automatedReportUuid' => $this->reportUuid,\n 'recipientsCount' => count($recipients),\n ]);\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\AutomatedReports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\ProphetAi\\Exceptions\\ProphetException;\nuse Jiminny\\Component\\ProphetAi\\ProphetClient;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\nuse Throwable;\n\nclass RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use Queueable;\n\n private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';\n\n private const int MIN_ACTIVITIES_COUNT = 1;\n\n public int $tries = 2;\n\n private ?AutomatedReportResult $reportResult = null;\n\n public function __construct(private readonly string $reportUuid)\n {\n $this->onQueue(Constants::QUEUE_ANALYTICS);\n }\n\n public function uniqueId(): string\n {\n return $this->reportUuid;\n }\n\n public function handle(\n AutomatedReportsService $reportService,\n AskJiminnyReportActivityService $activityService,\n ProphetClient $prophetClient,\n LoggerInterface $logger,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n ): void {\n $logger->info(self::LOG_PREFIX . ' Started', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n try {\n $automatedReport = $reportService->getReport($this->reportUuid);\n\n if (! $this->validateReport($automatedReport, $logger)) {\n return;\n }\n\n $creator = $automatedReport->getCreator();\n if ($creator === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $savedSearch = $automatedReport->getSavedSearch();\n if ($savedSearch === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $prompt = $automatedReport->getAskAnythingPrompt();\n if ($prompt === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $this->reportResult = $reportService->getOrCreateReportResult(\n automatedReport: $automatedReport,\n data: [\n 'status' => AutomatedReportResult::STATUS_DEFAULT,\n 'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,\n ]\n );\n\n $activityIds = $activityService->getActivityIdsForSavedSearch(\n savedSearch: $savedSearch,\n user: $creator,\n frequency: $automatedReport->getFrequency(),\n );\n\n $logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {\n $this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);\n\n $logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n $this->dispatchNotGeneratedNotifications(\n $automatedReport,\n $reportService,\n $urlGenerator,\n $jobDispatcher,\n $logger,\n );\n\n return;\n }\n\n $payload = $reportService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $this->reportResult,\n activityIds: $activityIds,\n );\n\n $this->reportResult->update([\n 'name' => $reportService->getReportFileName($this->reportResult),\n 'payload' => $payload,\n 'status' => AutomatedReportResult::STATUS_REQUESTED,\n 'requested_at' => Carbon::now()->toDateTimeString(),\n ]);\n\n $logger->info(self::LOG_PREFIX . ' Request sent', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult->getUuid(),\n 'payload' => $payload,\n ]);\n\n $response = $prophetClient->sendRequest(\n endpoint: ProphetClient::ASK_JIMINNY_REPORT,\n requestArray: $payload,\n );\n\n $logger->info(self::LOG_PREFIX . ' Response received', [\n 'response' => $response->getContent(),\n ]);\n } catch (Throwable $exception) {\n $reason = $exception instanceof ProphetException\n ? AutomatedReportResult::REASON_PROPHET_API_ERROR\n : AutomatedReportResult::REASON_DEFAULT;\n\n $this->failReport($reason);\n\n $logger->error(self::LOG_PREFIX . ' Error', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult?->getUuid(),\n 'code' => $exception->getCode(),\n 'message' => $exception->getMessage(),\n ]);\n\n if ($this->attempts() < $this->tries) {\n $logger->info(self::LOG_PREFIX . ' Retry scheduled', [\n 'attempts' => $this->attempts(),\n ]);\n\n $this->release(30);\n } else {\n $this->fail($exception);\n }\n }\n }\n\n private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool\n {\n if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [\n 'automatedReportUuid' => $this->reportUuid,\n 'type' => $automatedReport->getType(),\n ]);\n\n return false;\n }\n\n if (! $automatedReport->getStatus()) {\n $logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {\n $logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n return true;\n }\n\n private function failReport(int $reason): void\n {\n $this->reportResult?->update([\n 'status' => AutomatedReportResult::STATUS_FAILED,\n 'reason' => $reason,\n ]);\n }\n\n private function dispatchNotGeneratedNotifications(\n AutomatedReport $automatedReport,\n AutomatedReportsService $reportService,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n LoggerInterface $logger,\n ): void {\n if ($this->reportResult === null) {\n return;\n }\n\n $recipients = $reportService->getValidRecipientUsers($automatedReport);\n if (empty($recipients)) {\n $logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $reportName = $automatedReport->getCustomName()\n ?: $reportService->getReportTypeName($this->reportResult);\n $periodName = $reportService->getReportPeriodName($this->reportResult);\n $reportsPageUrl = $urlGenerator->route('ai.reports.show');\n\n foreach ($recipients as $recipient) {\n $jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(\n reportUuid: $this->reportResult->getUuid(),\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n reportName: $reportName,\n periodName: $periodName,\n reportsPageUrl: $reportsPageUrl,\n ));\n }\n\n $logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [\n 'automatedReportUuid' => $this->reportUuid,\n 'recipientsCount' => count($recipients),\n ]);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"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},"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},"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},"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\\Mail\\Reports;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Jiminny\\Mail\\Mailable;\n\nclass ReportNotGenerated extends Mailable implements ShouldQueue\n{\n use Queueable;\n use SerializesModels;\n\n public function __construct(\n private readonly string $reportName,\n private readonly string $periodName,\n private readonly string $reportsPageUrl,\n private readonly string $mailSubject,\n ) {\n }\n\n public function build(): Mailable\n {\n $logoCDN = config('logos.cdn.header');\n $fullLogoCDN = config('logos.cdn.footer');\n\n $fromAddress = config('mail.from.address');\n if (config('jiminny.deploy_region') === 'eu') {\n $fromAddress = 'no-reply@jiminny.com';\n }\n\n return $this\n ->from($fromAddress, config('mail.from.name'))\n ->view('emails.reports.report-not-generated', [\n 'reportName' => $this->reportName,\n 'periodName' => $this->periodName,\n 'reportsPageUrl' => $this->reportsPageUrl,\n 'isReport' => true,\n 'headerLogoCdn' => $logoCDN,\n 'footerLogoCdn' => $fullLogoCDN,\n ])\n ->subject($this->mailSubject);\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Mail\\Reports;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Jiminny\\Mail\\Mailable;\n\nclass ReportNotGenerated extends Mailable implements ShouldQueue\n{\n use Queueable;\n use SerializesModels;\n\n public function __construct(\n private readonly string $reportName,\n private readonly string $periodName,\n private readonly string $reportsPageUrl,\n private readonly string $mailSubject,\n ) {\n }\n\n public function build(): Mailable\n {\n $logoCDN = config('logos.cdn.header');\n $fullLogoCDN = config('logos.cdn.footer');\n\n $fromAddress = config('mail.from.address');\n if (config('jiminny.deploy_region') === 'eu') {\n $fromAddress = 'no-reply@jiminny.com';\n }\n\n return $this\n ->from($fromAddress, config('mail.from.name'))\n ->view('emails.reports.report-not-generated', [\n 'reportName' => $this->reportName,\n 'periodName' => $this->periodName,\n 'reportsPageUrl' => $this->reportsPageUrl,\n 'isReport' => true,\n 'headerLogoCdn' => $logoCDN,\n 'footerLogoCdn' => $fullLogoCDN,\n ])\n ->subject($this->mailSubject);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"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},"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},"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},"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},"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},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8828084800201052505
|
-787814697458742428
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\AutomatedReports;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
use Throwable;
class RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use Queueable;
private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';
private const int MIN_ACTIVITIES_COUNT = 1;
public int $tries = 2;
private ?AutomatedReportResult $reportResult = null;
public function __construct(private readonly string $reportUuid)
{
$this->onQueue(Constants::QUEUE_ANALYTICS);
}
public function uniqueId(): string
{
return $this->reportUuid;
}
public function handle(
AutomatedReportsService $reportService,
AskJiminnyReportActivityService $activityService,
ProphetClient $prophetClient,
LoggerInterface $logger,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
): void {
$logger->info(self::LOG_PREFIX . ' Started', [
'automatedReportUuid' => $this->reportUuid,
]);
try {
$automatedReport = $reportService->getReport($this->reportUuid);
if (! $this->validateReport($automatedReport, $logger)) {
return;
}
$creator = $automatedReport->getCreator();
if ($creator === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$savedSearch = $automatedReport->getSavedSearch();
if ($savedSearch === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$prompt = $automatedReport->getAskAnythingPrompt();
if ($prompt === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$this->reportResult = $reportService->getOrCreateReportResult(
automatedReport: $automatedReport,
data: [
'status' => AutomatedReportResult::STATUS_DEFAULT,
'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,
]
);
$activityIds = $activityService->getActivityIdsForSavedSearch(
savedSearch: $savedSearch,
user: $creator,
frequency: $automatedReport->getFrequency(),
);
$logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {
$this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);
$logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
$this->dispatchNotGeneratedNotifications(
$automatedReport,
$reportService,
$urlGenerator,
$jobDispatcher,
$logger,
);
return;
}
$payload = $reportService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $this->reportResult,
activityIds: $activityIds,
);
$this->reportResult->update([
'name' => $reportService->getReportFileName($this->reportResult),
'payload' => $payload,
'status' => AutomatedReportResult::STATUS_REQUESTED,
'requested_at' => Carbon::now()->toDateTimeString(),
]);
$logger->info(self::LOG_PREFIX . ' Request sent', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult->getUuid(),
'payload' => $payload,
]);
$response = $prophetClient->sendRequest(
endpoint: ProphetClient::ASK_JIMINNY_REPORT,
requestArray: $payload,
);
$logger->info(self::LOG_PREFIX . ' Response received', [
'response' => $response->getContent(),
]);
} catch (Throwable $exception) {
$reason = $exception instanceof ProphetException
? AutomatedReportResult::REASON_PROPHET_API_ERROR
: AutomatedReportResult::REASON_DEFAULT;
$this->failReport($reason);
$logger->error(self::LOG_PREFIX . ' Error', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult?->getUuid(),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
if ($this->attempts() < $this->tries) {
$logger->info(self::LOG_PREFIX . ' Retry scheduled', [
'attempts' => $this->attempts(),
]);
$this->release(30);
} else {
$this->fail($exception);
}
}
}
private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool
{
if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {
$logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [
'automatedReportUuid' => $this->reportUuid,
'type' => $automatedReport->getType(),
]);
return false;
}
if (! $automatedReport->getStatus()) {
$logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {
$logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
return true;
}
private function failReport(int $reason): void
{
$this->reportResult?->update([
'status' => AutomatedReportResult::STATUS_FAILED,
'reason' => $reason,
]);
}
private function dispatchNotGeneratedNotifications(
AutomatedReport $automatedReport,
AutomatedReportsService $reportService,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
LoggerInterface $logger,
): void {
if ($this->reportResult === null) {
return;
}
$recipients = $reportService->getValidRecipientUsers($automatedReport);
if (empty($recipients)) {
$logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$reportName = $automatedReport->getCustomName()
?: $reportService->getReportTypeName($this->reportResult);
$periodName = $reportService->getReportPeriodName($this->reportResult);
$reportsPageUrl = $urlGenerator->route('ai.reports.show');
foreach ($recipients as $recipient) {
$jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(
reportUuid: $this->reportResult->getUuid(),
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
reportName: $reportName,
periodName: $periodName,
reportsPageUrl: $reportsPageUrl,
));
}
$logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [
'automatedReportUuid' => $this->reportUuid,
'recipientsCount' => count($recipients),
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Mail\Reports;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Jiminny\Mail\Mailable;
class ReportNotGenerated extends Mailable implements ShouldQueue
{
use Queueable;
use SerializesModels;
public function __construct(
private readonly string $reportName,
private readonly string $periodName,
private readonly string $reportsPageUrl,
private readonly string $mailSubject,
) {
}
public function build(): Mailable
{
$logoCDN = config('logos.cdn.header');
$fullLogoCDN = config('logos.cdn.footer');
$fromAddress = config('mail.from.address');
if (config('jiminny.deploy_region') === 'eu') {
$fromAddress = '[EMAIL]';
}
return $this
->from($fromAddress, config('mail.from.name'))
->view('emails.reports.report-not-generated', [
'reportName' => $this->reportName,
'periodName' => $this->periodName,
'reportsPageUrl' => $this->reportsPageUrl,
'isReport' => true,
'headerLogoCdn' => $logoCDN,
'footerLogoCdn' => $fullLogoCDN,
])
->subject($this->mailSubject);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
|
64463
|
1426
|
35
|
2026-04-21T11:13:49.724144+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776770029724_m2.jpg...
|
PhpStorm
|
faVsco.js – ReportNotGenerated.php
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\AutomatedReports;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
use Throwable;
class RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use Queueable;
private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';
private const int MIN_ACTIVITIES_COUNT = 1;
public int $tries = 2;
private ?AutomatedReportResult $reportResult = null;
public function __construct(private readonly string $reportUuid)
{
$this->onQueue(Constants::QUEUE_ANALYTICS);
}
public function uniqueId(): string
{
return $this->reportUuid;
}
public function handle(
AutomatedReportsService $reportService,
AskJiminnyReportActivityService $activityService,
ProphetClient $prophetClient,
LoggerInterface $logger,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
): void {
$logger->info(self::LOG_PREFIX . ' Started', [
'automatedReportUuid' => $this->reportUuid,
]);
try {
$automatedReport = $reportService->getReport($this->reportUuid);
if (! $this->validateReport($automatedReport, $logger)) {
return;
}
$creator = $automatedReport->getCreator();
if ($creator === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$savedSearch = $automatedReport->getSavedSearch();
if ($savedSearch === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$prompt = $automatedReport->getAskAnythingPrompt();
if ($prompt === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$this->reportResult = $reportService->getOrCreateReportResult(
automatedReport: $automatedReport,
data: [
'status' => AutomatedReportResult::STATUS_DEFAULT,
'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,
]
);
$activityIds = $activityService->getActivityIdsForSavedSearch(
savedSearch: $savedSearch,
user: $creator,
frequency: $automatedReport->getFrequency(),
);
$logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {
$this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);
$logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
$this->dispatchNotGeneratedNotifications(
$automatedReport,
$reportService,
$urlGenerator,
$jobDispatcher,
$logger,
);
return;
}
$payload = $reportService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $this->reportResult,
activityIds: $activityIds,
);
$this->reportResult->update([
'name' => $reportService->getReportFileName($this->reportResult),
'payload' => $payload,
'status' => AutomatedReportResult::STATUS_REQUESTED,
'requested_at' => Carbon::now()->toDateTimeString(),
]);
$logger->info(self::LOG_PREFIX . ' Request sent', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult->getUuid(),
'payload' => $payload,
]);
$response = $prophetClient->sendRequest(
endpoint: ProphetClient::ASK_JIMINNY_REPORT,
requestArray: $payload,
);
$logger->info(self::LOG_PREFIX . ' Response received', [
'response' => $response->getContent(),
]);
} catch (Throwable $exception) {
$reason = $exception instanceof ProphetException
? AutomatedReportResult::REASON_PROPHET_API_ERROR
: AutomatedReportResult::REASON_DEFAULT;
$this->failReport($reason);
$logger->error(self::LOG_PREFIX . ' Error', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult?->getUuid(),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
if ($this->attempts() < $this->tries) {
$logger->info(self::LOG_PREFIX . ' Retry scheduled', [
'attempts' => $this->attempts(),
]);
$this->release(30);
} else {
$this->fail($exception);
}
}
}
private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool
{
if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {
$logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [
'automatedReportUuid' => $this->reportUuid,
'type' => $automatedReport->getType(),
]);
return false;
}
if (! $automatedReport->getStatus()) {
$logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {
$logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
return true;
}
private function failReport(int $reason): void
{
$this->reportResult?->update([
'status' => AutomatedReportResult::STATUS_FAILED,
'reason' => $reason,
]);
}
private function dispatchNotGeneratedNotifications(
AutomatedReport $automatedReport,
AutomatedReportsService $reportService,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
LoggerInterface $logger,
): void {
if ($this->reportResult === null) {
return;
}
$recipients = $reportService->getValidRecipientUsers($automatedReport);
if (empty($recipients)) {
$logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$reportName = $automatedReport->getCustomName()
?: $reportService->getReportTypeName($this->reportResult);
$periodName = $reportService->getReportPeriodName($this->reportResult);
$reportsPageUrl = $urlGenerator->route('ai.reports.show');
foreach ($recipients as $recipient) {
$jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(
reportUuid: $this->reportResult->getUuid(),
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
reportName: $reportName,
periodName: $periodName,
reportsPageUrl: $reportsPageUrl,
));
}
$logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [
'automatedReportUuid' => $this->reportUuid,
'recipientsCount' => count($recipients),
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Mail\Reports;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Jiminny\Mail\Mailable;
class ReportNotGenerated extends Mailable implements ShouldQueue
{
use Queueable;
use SerializesModels;
public function __construct(
private readonly string $reportName,
private readonly string $periodName,
private readonly string $reportsPageUrl,
private readonly string $mailSubject,
) {
}
public function build(): Mailable
{
$logoCDN = config('logos.cdn.header');
$fullLogoCDN = config('logos.cdn.footer');
$fromAddress = config('mail.from.address');
if (config('jiminny.deploy_region') === 'eu') {
$fromAddress = '[EMAIL]';
}
return $this
->from($fromAddress, config('mail.from.name'))
->view('emails.reports.report-not-generated', [
'reportName' => $this->reportName,
'periodName' => $this->periodName,
'reportsPageUrl' => $this->reportsPageUrl,
'isReport' => true,
'headerLogoCdn' => $logoCDN,
'footerLogoCdn' => $fullLogoCDN,
])
->subject($this->mailSubject);
}
}
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},"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.12732713,"height":0.025538707},"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"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},"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},"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},"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},"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},"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},"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},"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},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\AutomatedReports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\ProphetAi\\Exceptions\\ProphetException;\nuse Jiminny\\Component\\ProphetAi\\ProphetClient;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\nuse Throwable;\n\nclass RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use Queueable;\n\n private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';\n\n private const int MIN_ACTIVITIES_COUNT = 1;\n\n public int $tries = 2;\n\n private ?AutomatedReportResult $reportResult = null;\n\n public function __construct(private readonly string $reportUuid)\n {\n $this->onQueue(Constants::QUEUE_ANALYTICS);\n }\n\n public function uniqueId(): string\n {\n return $this->reportUuid;\n }\n\n public function handle(\n AutomatedReportsService $reportService,\n AskJiminnyReportActivityService $activityService,\n ProphetClient $prophetClient,\n LoggerInterface $logger,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n ): void {\n $logger->info(self::LOG_PREFIX . ' Started', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n try {\n $automatedReport = $reportService->getReport($this->reportUuid);\n\n if (! $this->validateReport($automatedReport, $logger)) {\n return;\n }\n\n $creator = $automatedReport->getCreator();\n if ($creator === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $savedSearch = $automatedReport->getSavedSearch();\n if ($savedSearch === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $prompt = $automatedReport->getAskAnythingPrompt();\n if ($prompt === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $this->reportResult = $reportService->getOrCreateReportResult(\n automatedReport: $automatedReport,\n data: [\n 'status' => AutomatedReportResult::STATUS_DEFAULT,\n 'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,\n ]\n );\n\n $activityIds = $activityService->getActivityIdsForSavedSearch(\n savedSearch: $savedSearch,\n user: $creator,\n frequency: $automatedReport->getFrequency(),\n );\n\n $logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {\n $this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);\n\n $logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n $this->dispatchNotGeneratedNotifications(\n $automatedReport,\n $reportService,\n $urlGenerator,\n $jobDispatcher,\n $logger,\n );\n\n return;\n }\n\n $payload = $reportService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $this->reportResult,\n activityIds: $activityIds,\n );\n\n $this->reportResult->update([\n 'name' => $reportService->getReportFileName($this->reportResult),\n 'payload' => $payload,\n 'status' => AutomatedReportResult::STATUS_REQUESTED,\n 'requested_at' => Carbon::now()->toDateTimeString(),\n ]);\n\n $logger->info(self::LOG_PREFIX . ' Request sent', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult->getUuid(),\n 'payload' => $payload,\n ]);\n\n $response = $prophetClient->sendRequest(\n endpoint: ProphetClient::ASK_JIMINNY_REPORT,\n requestArray: $payload,\n );\n\n $logger->info(self::LOG_PREFIX . ' Response received', [\n 'response' => $response->getContent(),\n ]);\n } catch (Throwable $exception) {\n $reason = $exception instanceof ProphetException\n ? AutomatedReportResult::REASON_PROPHET_API_ERROR\n : AutomatedReportResult::REASON_DEFAULT;\n\n $this->failReport($reason);\n\n $logger->error(self::LOG_PREFIX . ' Error', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult?->getUuid(),\n 'code' => $exception->getCode(),\n 'message' => $exception->getMessage(),\n ]);\n\n if ($this->attempts() < $this->tries) {\n $logger->info(self::LOG_PREFIX . ' Retry scheduled', [\n 'attempts' => $this->attempts(),\n ]);\n\n $this->release(30);\n } else {\n $this->fail($exception);\n }\n }\n }\n\n private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool\n {\n if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [\n 'automatedReportUuid' => $this->reportUuid,\n 'type' => $automatedReport->getType(),\n ]);\n\n return false;\n }\n\n if (! $automatedReport->getStatus()) {\n $logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {\n $logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n return true;\n }\n\n private function failReport(int $reason): void\n {\n $this->reportResult?->update([\n 'status' => AutomatedReportResult::STATUS_FAILED,\n 'reason' => $reason,\n ]);\n }\n\n private function dispatchNotGeneratedNotifications(\n AutomatedReport $automatedReport,\n AutomatedReportsService $reportService,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n LoggerInterface $logger,\n ): void {\n if ($this->reportResult === null) {\n return;\n }\n\n $recipients = $reportService->getValidRecipientUsers($automatedReport);\n if (empty($recipients)) {\n $logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $reportName = $automatedReport->getCustomName()\n ?: $reportService->getReportTypeName($this->reportResult);\n $periodName = $reportService->getReportPeriodName($this->reportResult);\n $reportsPageUrl = $urlGenerator->route('ai.reports.show');\n\n foreach ($recipients as $recipient) {\n $jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(\n reportUuid: $this->reportResult->getUuid(),\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n reportName: $reportName,\n periodName: $periodName,\n reportsPageUrl: $reportsPageUrl,\n ));\n }\n\n $logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [\n 'automatedReportUuid' => $this->reportUuid,\n 'recipientsCount' => count($recipients),\n ]);\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\AutomatedReports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\ProphetAi\\Exceptions\\ProphetException;\nuse Jiminny\\Component\\ProphetAi\\ProphetClient;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\nuse Throwable;\n\nclass RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use Queueable;\n\n private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';\n\n private const int MIN_ACTIVITIES_COUNT = 1;\n\n public int $tries = 2;\n\n private ?AutomatedReportResult $reportResult = null;\n\n public function __construct(private readonly string $reportUuid)\n {\n $this->onQueue(Constants::QUEUE_ANALYTICS);\n }\n\n public function uniqueId(): string\n {\n return $this->reportUuid;\n }\n\n public function handle(\n AutomatedReportsService $reportService,\n AskJiminnyReportActivityService $activityService,\n ProphetClient $prophetClient,\n LoggerInterface $logger,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n ): void {\n $logger->info(self::LOG_PREFIX . ' Started', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n try {\n $automatedReport = $reportService->getReport($this->reportUuid);\n\n if (! $this->validateReport($automatedReport, $logger)) {\n return;\n }\n\n $creator = $automatedReport->getCreator();\n if ($creator === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $savedSearch = $automatedReport->getSavedSearch();\n if ($savedSearch === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $prompt = $automatedReport->getAskAnythingPrompt();\n if ($prompt === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $this->reportResult = $reportService->getOrCreateReportResult(\n automatedReport: $automatedReport,\n data: [\n 'status' => AutomatedReportResult::STATUS_DEFAULT,\n 'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,\n ]\n );\n\n $activityIds = $activityService->getActivityIdsForSavedSearch(\n savedSearch: $savedSearch,\n user: $creator,\n frequency: $automatedReport->getFrequency(),\n );\n\n $logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {\n $this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);\n\n $logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n $this->dispatchNotGeneratedNotifications(\n $automatedReport,\n $reportService,\n $urlGenerator,\n $jobDispatcher,\n $logger,\n );\n\n return;\n }\n\n $payload = $reportService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $this->reportResult,\n activityIds: $activityIds,\n );\n\n $this->reportResult->update([\n 'name' => $reportService->getReportFileName($this->reportResult),\n 'payload' => $payload,\n 'status' => AutomatedReportResult::STATUS_REQUESTED,\n 'requested_at' => Carbon::now()->toDateTimeString(),\n ]);\n\n $logger->info(self::LOG_PREFIX . ' Request sent', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult->getUuid(),\n 'payload' => $payload,\n ]);\n\n $response = $prophetClient->sendRequest(\n endpoint: ProphetClient::ASK_JIMINNY_REPORT,\n requestArray: $payload,\n );\n\n $logger->info(self::LOG_PREFIX . ' Response received', [\n 'response' => $response->getContent(),\n ]);\n } catch (Throwable $exception) {\n $reason = $exception instanceof ProphetException\n ? AutomatedReportResult::REASON_PROPHET_API_ERROR\n : AutomatedReportResult::REASON_DEFAULT;\n\n $this->failReport($reason);\n\n $logger->error(self::LOG_PREFIX . ' Error', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult?->getUuid(),\n 'code' => $exception->getCode(),\n 'message' => $exception->getMessage(),\n ]);\n\n if ($this->attempts() < $this->tries) {\n $logger->info(self::LOG_PREFIX . ' Retry scheduled', [\n 'attempts' => $this->attempts(),\n ]);\n\n $this->release(30);\n } else {\n $this->fail($exception);\n }\n }\n }\n\n private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool\n {\n if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [\n 'automatedReportUuid' => $this->reportUuid,\n 'type' => $automatedReport->getType(),\n ]);\n\n return false;\n }\n\n if (! $automatedReport->getStatus()) {\n $logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {\n $logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n return true;\n }\n\n private function failReport(int $reason): void\n {\n $this->reportResult?->update([\n 'status' => AutomatedReportResult::STATUS_FAILED,\n 'reason' => $reason,\n ]);\n }\n\n private function dispatchNotGeneratedNotifications(\n AutomatedReport $automatedReport,\n AutomatedReportsService $reportService,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n LoggerInterface $logger,\n ): void {\n if ($this->reportResult === null) {\n return;\n }\n\n $recipients = $reportService->getValidRecipientUsers($automatedReport);\n if (empty($recipients)) {\n $logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $reportName = $automatedReport->getCustomName()\n ?: $reportService->getReportTypeName($this->reportResult);\n $periodName = $reportService->getReportPeriodName($this->reportResult);\n $reportsPageUrl = $urlGenerator->route('ai.reports.show');\n\n foreach ($recipients as $recipient) {\n $jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(\n reportUuid: $this->reportResult->getUuid(),\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n reportName: $reportName,\n periodName: $periodName,\n reportsPageUrl: $reportsPageUrl,\n ));\n }\n\n $logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [\n 'automatedReportUuid' => $this->reportUuid,\n 'recipientsCount' => count($recipients),\n ]);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"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},"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},"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},"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\\Mail\\Reports;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Jiminny\\Mail\\Mailable;\n\nclass ReportNotGenerated extends Mailable implements ShouldQueue\n{\n use Queueable;\n use SerializesModels;\n\n public function __construct(\n private readonly string $reportName,\n private readonly string $periodName,\n private readonly string $reportsPageUrl,\n private readonly string $mailSubject,\n ) {\n }\n\n public function build(): Mailable\n {\n $logoCDN = config('logos.cdn.header');\n $fullLogoCDN = config('logos.cdn.footer');\n\n $fromAddress = config('mail.from.address');\n if (config('jiminny.deploy_region') === 'eu') {\n $fromAddress = 'no-reply@jiminny.com';\n }\n\n return $this\n ->from($fromAddress, config('mail.from.name'))\n ->view('emails.reports.report-not-generated', [\n 'reportName' => $this->reportName,\n 'periodName' => $this->periodName,\n 'reportsPageUrl' => $this->reportsPageUrl,\n 'isReport' => true,\n 'headerLogoCdn' => $logoCDN,\n 'footerLogoCdn' => $fullLogoCDN,\n ])\n ->subject($this->mailSubject);\n }\n}","depth":4,"bounds":{"left":0.40425533,"top":0.12210695,"width":0.2862367,"height":0.87789303},"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Mail\\Reports;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Jiminny\\Mail\\Mailable;\n\nclass ReportNotGenerated extends Mailable implements ShouldQueue\n{\n use Queueable;\n use SerializesModels;\n\n public function __construct(\n private readonly string $reportName,\n private readonly string $periodName,\n private readonly string $reportsPageUrl,\n private readonly string $mailSubject,\n ) {\n }\n\n public function build(): Mailable\n {\n $logoCDN = config('logos.cdn.header');\n $fullLogoCDN = config('logos.cdn.footer');\n\n $fromAddress = config('mail.from.address');\n if (config('jiminny.deploy_region') === 'eu') {\n $fromAddress = 'no-reply@jiminny.com';\n }\n\n return $this\n ->from($fromAddress, config('mail.from.name'))\n ->view('emails.reports.report-not-generated', [\n 'reportName' => $this->reportName,\n 'periodName' => $this->periodName,\n 'reportsPageUrl' => $this->reportsPageUrl,\n 'isReport' => true,\n 'headerLogoCdn' => $logoCDN,\n 'footerLogoCdn' => $fullLogoCDN,\n ])\n ->subject($this->mailSubject);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"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},"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},"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},"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},"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},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8828084800201052505
|
-787814697458742428
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\AutomatedReports;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
use Throwable;
class RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use Queueable;
private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';
private const int MIN_ACTIVITIES_COUNT = 1;
public int $tries = 2;
private ?AutomatedReportResult $reportResult = null;
public function __construct(private readonly string $reportUuid)
{
$this->onQueue(Constants::QUEUE_ANALYTICS);
}
public function uniqueId(): string
{
return $this->reportUuid;
}
public function handle(
AutomatedReportsService $reportService,
AskJiminnyReportActivityService $activityService,
ProphetClient $prophetClient,
LoggerInterface $logger,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
): void {
$logger->info(self::LOG_PREFIX . ' Started', [
'automatedReportUuid' => $this->reportUuid,
]);
try {
$automatedReport = $reportService->getReport($this->reportUuid);
if (! $this->validateReport($automatedReport, $logger)) {
return;
}
$creator = $automatedReport->getCreator();
if ($creator === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$savedSearch = $automatedReport->getSavedSearch();
if ($savedSearch === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$prompt = $automatedReport->getAskAnythingPrompt();
if ($prompt === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$this->reportResult = $reportService->getOrCreateReportResult(
automatedReport: $automatedReport,
data: [
'status' => AutomatedReportResult::STATUS_DEFAULT,
'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,
]
);
$activityIds = $activityService->getActivityIdsForSavedSearch(
savedSearch: $savedSearch,
user: $creator,
frequency: $automatedReport->getFrequency(),
);
$logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {
$this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);
$logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
$this->dispatchNotGeneratedNotifications(
$automatedReport,
$reportService,
$urlGenerator,
$jobDispatcher,
$logger,
);
return;
}
$payload = $reportService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $this->reportResult,
activityIds: $activityIds,
);
$this->reportResult->update([
'name' => $reportService->getReportFileName($this->reportResult),
'payload' => $payload,
'status' => AutomatedReportResult::STATUS_REQUESTED,
'requested_at' => Carbon::now()->toDateTimeString(),
]);
$logger->info(self::LOG_PREFIX . ' Request sent', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult->getUuid(),
'payload' => $payload,
]);
$response = $prophetClient->sendRequest(
endpoint: ProphetClient::ASK_JIMINNY_REPORT,
requestArray: $payload,
);
$logger->info(self::LOG_PREFIX . ' Response received', [
'response' => $response->getContent(),
]);
} catch (Throwable $exception) {
$reason = $exception instanceof ProphetException
? AutomatedReportResult::REASON_PROPHET_API_ERROR
: AutomatedReportResult::REASON_DEFAULT;
$this->failReport($reason);
$logger->error(self::LOG_PREFIX . ' Error', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult?->getUuid(),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
if ($this->attempts() < $this->tries) {
$logger->info(self::LOG_PREFIX . ' Retry scheduled', [
'attempts' => $this->attempts(),
]);
$this->release(30);
} else {
$this->fail($exception);
}
}
}
private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool
{
if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {
$logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [
'automatedReportUuid' => $this->reportUuid,
'type' => $automatedReport->getType(),
]);
return false;
}
if (! $automatedReport->getStatus()) {
$logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {
$logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
return true;
}
private function failReport(int $reason): void
{
$this->reportResult?->update([
'status' => AutomatedReportResult::STATUS_FAILED,
'reason' => $reason,
]);
}
private function dispatchNotGeneratedNotifications(
AutomatedReport $automatedReport,
AutomatedReportsService $reportService,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
LoggerInterface $logger,
): void {
if ($this->reportResult === null) {
return;
}
$recipients = $reportService->getValidRecipientUsers($automatedReport);
if (empty($recipients)) {
$logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$reportName = $automatedReport->getCustomName()
?: $reportService->getReportTypeName($this->reportResult);
$periodName = $reportService->getReportPeriodName($this->reportResult);
$reportsPageUrl = $urlGenerator->route('ai.reports.show');
foreach ($recipients as $recipient) {
$jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(
reportUuid: $this->reportResult->getUuid(),
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
reportName: $reportName,
periodName: $periodName,
reportsPageUrl: $reportsPageUrl,
));
}
$logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [
'automatedReportUuid' => $this->reportUuid,
'recipientsCount' => count($recipients),
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Mail\Reports;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Jiminny\Mail\Mailable;
class ReportNotGenerated extends Mailable implements ShouldQueue
{
use Queueable;
use SerializesModels;
public function __construct(
private readonly string $reportName,
private readonly string $periodName,
private readonly string $reportsPageUrl,
private readonly string $mailSubject,
) {
}
public function build(): Mailable
{
$logoCDN = config('logos.cdn.header');
$fullLogoCDN = config('logos.cdn.footer');
$fromAddress = config('mail.from.address');
if (config('jiminny.deploy_region') === 'eu') {
$fromAddress = '[EMAIL]';
}
return $this
->from($fromAddress, config('mail.from.name'))
->view('emails.reports.report-not-generated', [
'reportName' => $this->reportName,
'periodName' => $this->periodName,
'reportsPageUrl' => $this->reportsPageUrl,
'isReport' => true,
'headerLogoCdn' => $logoCDN,
'footerLogoCdn' => $fullLogoCDN,
])
->subject($this->mailSubject);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
64461
|
|
64464
|
1425
|
31
|
2026-04-21T11:13:50.114334+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776770030114_m1.jpg...
|
PhpStorm
|
faVsco.js – ReportNotGenerated.php
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\AutomatedReports;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
use Throwable;
class RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use Queueable;
private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';
private const int MIN_ACTIVITIES_COUNT = 1;
public int $tries = 2;
private ?AutomatedReportResult $reportResult = null;
public function __construct(private readonly string $reportUuid)
{
$this->onQueue(Constants::QUEUE_ANALYTICS);
}
public function uniqueId(): string
{
return $this->reportUuid;
}
public function handle(
AutomatedReportsService $reportService,
AskJiminnyReportActivityService $activityService,
ProphetClient $prophetClient,
LoggerInterface $logger,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
): void {
$logger->info(self::LOG_PREFIX . ' Started', [
'automatedReportUuid' => $this->reportUuid,
]);
try {
$automatedReport = $reportService->getReport($this->reportUuid);
if (! $this->validateReport($automatedReport, $logger)) {
return;
}
$creator = $automatedReport->getCreator();
if ($creator === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$savedSearch = $automatedReport->getSavedSearch();
if ($savedSearch === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$prompt = $automatedReport->getAskAnythingPrompt();
if ($prompt === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$this->reportResult = $reportService->getOrCreateReportResult(
automatedReport: $automatedReport,
data: [
'status' => AutomatedReportResult::STATUS_DEFAULT,
'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,
]
);
$activityIds = $activityService->getActivityIdsForSavedSearch(
savedSearch: $savedSearch,
user: $creator,
frequency: $automatedReport->getFrequency(),
);
$logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {
$this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);
$logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
$this->dispatchNotGeneratedNotifications(
$automatedReport,
$reportService,
$urlGenerator,
$jobDispatcher,
$logger,
);
return;
}
$payload = $reportService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $this->reportResult,
activityIds: $activityIds,
);
$this->reportResult->update([
'name' => $reportService->getReportFileName($this->reportResult),
'payload' => $payload,
'status' => AutomatedReportResult::STATUS_REQUESTED,
'requested_at' => Carbon::now()->toDateTimeString(),
]);
$logger->info(self::LOG_PREFIX . ' Request sent', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult->getUuid(),
'payload' => $payload,
]);
$response = $prophetClient->sendRequest(
endpoint: ProphetClient::ASK_JIMINNY_REPORT,
requestArray: $payload,
);
$logger->info(self::LOG_PREFIX . ' Response received', [
'response' => $response->getContent(),
]);
} catch (Throwable $exception) {
$reason = $exception instanceof ProphetException
? AutomatedReportResult::REASON_PROPHET_API_ERROR
: AutomatedReportResult::REASON_DEFAULT;
$this->failReport($reason);
$logger->error(self::LOG_PREFIX . ' Error', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult?->getUuid(),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
if ($this->attempts() < $this->tries) {
$logger->info(self::LOG_PREFIX . ' Retry scheduled', [
'attempts' => $this->attempts(),
]);
$this->release(30);
} else {
$this->fail($exception);
}
}
}
private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool
{
if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {
$logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [
'automatedReportUuid' => $this->reportUuid,
'type' => $automatedReport->getType(),
]);
return false;
}
if (! $automatedReport->getStatus()) {
$logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {
$logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
return true;
}
private function failReport(int $reason): void
{
$this->reportResult?->update([
'status' => AutomatedReportResult::STATUS_FAILED,
'reason' => $reason,
]);
}
private function dispatchNotGeneratedNotifications(
AutomatedReport $automatedReport,
AutomatedReportsService $reportService,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
LoggerInterface $logger,
): void {
if ($this->reportResult === null) {
return;
}
$recipients = $reportService->getValidRecipientUsers($automatedReport);
if (empty($recipients)) {
$logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$reportName = $automatedReport->getCustomName()
?: $reportService->getReportTypeName($this->reportResult);
$periodName = $reportService->getReportPeriodName($this->reportResult);
$reportsPageUrl = $urlGenerator->route('ai.reports.show');
foreach ($recipients as $recipient) {
$jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(
reportUuid: $this->reportResult->getUuid(),
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
reportName: $reportName,
periodName: $periodName,
reportsPageUrl: $reportsPageUrl,
));
}
$logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [
'automatedReportUuid' => $this->reportUuid,
'recipientsCount' => count($recipients),
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Mail\Reports;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Jiminny\Mail\Mailable;
class ReportNotGenerated extends Mailable implements ShouldQueue
{
use Queueable;
use SerializesModels;
public function __construct(
private readonly string $reportName,
private readonly string $periodName,
private readonly string $reportsPageUrl,
private readonly string $mailSubject,
) {
}
public function build(): Mailable
{
$logoCDN = config('logos.cdn.header');
$fullLogoCDN = config('logos.cdn.footer');
$fromAddress = config('mail.from.address');
if (config('jiminny.deploy_region') === 'eu') {
$fromAddress = '[EMAIL]';
}
return $this
->from($fromAddress, config('mail.from.name'))
->view('emails.reports.report-not-generated', [
'reportName' => $this->reportName,
'periodName' => $this->periodName,
'reportsPageUrl' => $this->reportsPageUrl,
'isReport' => true,
'headerLogoCdn' => $logoCDN,
'footerLogoCdn' => $fullLogoCDN,
])
->subject($this->mailSubject);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"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},"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},"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},"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},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\AutomatedReports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\ProphetAi\\Exceptions\\ProphetException;\nuse Jiminny\\Component\\ProphetAi\\ProphetClient;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\nuse Throwable;\n\nclass RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use Queueable;\n\n private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';\n\n private const int MIN_ACTIVITIES_COUNT = 1;\n\n public int $tries = 2;\n\n private ?AutomatedReportResult $reportResult = null;\n\n public function __construct(private readonly string $reportUuid)\n {\n $this->onQueue(Constants::QUEUE_ANALYTICS);\n }\n\n public function uniqueId(): string\n {\n return $this->reportUuid;\n }\n\n public function handle(\n AutomatedReportsService $reportService,\n AskJiminnyReportActivityService $activityService,\n ProphetClient $prophetClient,\n LoggerInterface $logger,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n ): void {\n $logger->info(self::LOG_PREFIX . ' Started', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n try {\n $automatedReport = $reportService->getReport($this->reportUuid);\n\n if (! $this->validateReport($automatedReport, $logger)) {\n return;\n }\n\n $creator = $automatedReport->getCreator();\n if ($creator === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $savedSearch = $automatedReport->getSavedSearch();\n if ($savedSearch === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $prompt = $automatedReport->getAskAnythingPrompt();\n if ($prompt === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $this->reportResult = $reportService->getOrCreateReportResult(\n automatedReport: $automatedReport,\n data: [\n 'status' => AutomatedReportResult::STATUS_DEFAULT,\n 'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,\n ]\n );\n\n $activityIds = $activityService->getActivityIdsForSavedSearch(\n savedSearch: $savedSearch,\n user: $creator,\n frequency: $automatedReport->getFrequency(),\n );\n\n $logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {\n $this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);\n\n $logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n $this->dispatchNotGeneratedNotifications(\n $automatedReport,\n $reportService,\n $urlGenerator,\n $jobDispatcher,\n $logger,\n );\n\n return;\n }\n\n $payload = $reportService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $this->reportResult,\n activityIds: $activityIds,\n );\n\n $this->reportResult->update([\n 'name' => $reportService->getReportFileName($this->reportResult),\n 'payload' => $payload,\n 'status' => AutomatedReportResult::STATUS_REQUESTED,\n 'requested_at' => Carbon::now()->toDateTimeString(),\n ]);\n\n $logger->info(self::LOG_PREFIX . ' Request sent', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult->getUuid(),\n 'payload' => $payload,\n ]);\n\n $response = $prophetClient->sendRequest(\n endpoint: ProphetClient::ASK_JIMINNY_REPORT,\n requestArray: $payload,\n );\n\n $logger->info(self::LOG_PREFIX . ' Response received', [\n 'response' => $response->getContent(),\n ]);\n } catch (Throwable $exception) {\n $reason = $exception instanceof ProphetException\n ? AutomatedReportResult::REASON_PROPHET_API_ERROR\n : AutomatedReportResult::REASON_DEFAULT;\n\n $this->failReport($reason);\n\n $logger->error(self::LOG_PREFIX . ' Error', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult?->getUuid(),\n 'code' => $exception->getCode(),\n 'message' => $exception->getMessage(),\n ]);\n\n if ($this->attempts() < $this->tries) {\n $logger->info(self::LOG_PREFIX . ' Retry scheduled', [\n 'attempts' => $this->attempts(),\n ]);\n\n $this->release(30);\n } else {\n $this->fail($exception);\n }\n }\n }\n\n private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool\n {\n if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [\n 'automatedReportUuid' => $this->reportUuid,\n 'type' => $automatedReport->getType(),\n ]);\n\n return false;\n }\n\n if (! $automatedReport->getStatus()) {\n $logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {\n $logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n return true;\n }\n\n private function failReport(int $reason): void\n {\n $this->reportResult?->update([\n 'status' => AutomatedReportResult::STATUS_FAILED,\n 'reason' => $reason,\n ]);\n }\n\n private function dispatchNotGeneratedNotifications(\n AutomatedReport $automatedReport,\n AutomatedReportsService $reportService,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n LoggerInterface $logger,\n ): void {\n if ($this->reportResult === null) {\n return;\n }\n\n $recipients = $reportService->getValidRecipientUsers($automatedReport);\n if (empty($recipients)) {\n $logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $reportName = $automatedReport->getCustomName()\n ?: $reportService->getReportTypeName($this->reportResult);\n $periodName = $reportService->getReportPeriodName($this->reportResult);\n $reportsPageUrl = $urlGenerator->route('ai.reports.show');\n\n foreach ($recipients as $recipient) {\n $jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(\n reportUuid: $this->reportResult->getUuid(),\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n reportName: $reportName,\n periodName: $periodName,\n reportsPageUrl: $reportsPageUrl,\n ));\n }\n\n $logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [\n 'automatedReportUuid' => $this->reportUuid,\n 'recipientsCount' => count($recipients),\n ]);\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\AutomatedReports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\ProphetAi\\Exceptions\\ProphetException;\nuse Jiminny\\Component\\ProphetAi\\ProphetClient;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\nuse Throwable;\n\nclass RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use Queueable;\n\n private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';\n\n private const int MIN_ACTIVITIES_COUNT = 1;\n\n public int $tries = 2;\n\n private ?AutomatedReportResult $reportResult = null;\n\n public function __construct(private readonly string $reportUuid)\n {\n $this->onQueue(Constants::QUEUE_ANALYTICS);\n }\n\n public function uniqueId(): string\n {\n return $this->reportUuid;\n }\n\n public function handle(\n AutomatedReportsService $reportService,\n AskJiminnyReportActivityService $activityService,\n ProphetClient $prophetClient,\n LoggerInterface $logger,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n ): void {\n $logger->info(self::LOG_PREFIX . ' Started', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n try {\n $automatedReport = $reportService->getReport($this->reportUuid);\n\n if (! $this->validateReport($automatedReport, $logger)) {\n return;\n }\n\n $creator = $automatedReport->getCreator();\n if ($creator === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $savedSearch = $automatedReport->getSavedSearch();\n if ($savedSearch === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $prompt = $automatedReport->getAskAnythingPrompt();\n if ($prompt === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $this->reportResult = $reportService->getOrCreateReportResult(\n automatedReport: $automatedReport,\n data: [\n 'status' => AutomatedReportResult::STATUS_DEFAULT,\n 'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,\n ]\n );\n\n $activityIds = $activityService->getActivityIdsForSavedSearch(\n savedSearch: $savedSearch,\n user: $creator,\n frequency: $automatedReport->getFrequency(),\n );\n\n $logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {\n $this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);\n\n $logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n $this->dispatchNotGeneratedNotifications(\n $automatedReport,\n $reportService,\n $urlGenerator,\n $jobDispatcher,\n $logger,\n );\n\n return;\n }\n\n $payload = $reportService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $this->reportResult,\n activityIds: $activityIds,\n );\n\n $this->reportResult->update([\n 'name' => $reportService->getReportFileName($this->reportResult),\n 'payload' => $payload,\n 'status' => AutomatedReportResult::STATUS_REQUESTED,\n 'requested_at' => Carbon::now()->toDateTimeString(),\n ]);\n\n $logger->info(self::LOG_PREFIX . ' Request sent', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult->getUuid(),\n 'payload' => $payload,\n ]);\n\n $response = $prophetClient->sendRequest(\n endpoint: ProphetClient::ASK_JIMINNY_REPORT,\n requestArray: $payload,\n );\n\n $logger->info(self::LOG_PREFIX . ' Response received', [\n 'response' => $response->getContent(),\n ]);\n } catch (Throwable $exception) {\n $reason = $exception instanceof ProphetException\n ? AutomatedReportResult::REASON_PROPHET_API_ERROR\n : AutomatedReportResult::REASON_DEFAULT;\n\n $this->failReport($reason);\n\n $logger->error(self::LOG_PREFIX . ' Error', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult?->getUuid(),\n 'code' => $exception->getCode(),\n 'message' => $exception->getMessage(),\n ]);\n\n if ($this->attempts() < $this->tries) {\n $logger->info(self::LOG_PREFIX . ' Retry scheduled', [\n 'attempts' => $this->attempts(),\n ]);\n\n $this->release(30);\n } else {\n $this->fail($exception);\n }\n }\n }\n\n private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool\n {\n if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [\n 'automatedReportUuid' => $this->reportUuid,\n 'type' => $automatedReport->getType(),\n ]);\n\n return false;\n }\n\n if (! $automatedReport->getStatus()) {\n $logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {\n $logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n return true;\n }\n\n private function failReport(int $reason): void\n {\n $this->reportResult?->update([\n 'status' => AutomatedReportResult::STATUS_FAILED,\n 'reason' => $reason,\n ]);\n }\n\n private function dispatchNotGeneratedNotifications(\n AutomatedReport $automatedReport,\n AutomatedReportsService $reportService,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n LoggerInterface $logger,\n ): void {\n if ($this->reportResult === null) {\n return;\n }\n\n $recipients = $reportService->getValidRecipientUsers($automatedReport);\n if (empty($recipients)) {\n $logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $reportName = $automatedReport->getCustomName()\n ?: $reportService->getReportTypeName($this->reportResult);\n $periodName = $reportService->getReportPeriodName($this->reportResult);\n $reportsPageUrl = $urlGenerator->route('ai.reports.show');\n\n foreach ($recipients as $recipient) {\n $jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(\n reportUuid: $this->reportResult->getUuid(),\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n reportName: $reportName,\n periodName: $periodName,\n reportsPageUrl: $reportsPageUrl,\n ));\n }\n\n $logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [\n 'automatedReportUuid' => $this->reportUuid,\n 'recipientsCount' => count($recipients),\n ]);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"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},"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},"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},"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\\Mail\\Reports;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Jiminny\\Mail\\Mailable;\n\nclass ReportNotGenerated extends Mailable implements ShouldQueue\n{\n use Queueable;\n use SerializesModels;\n\n public function __construct(\n private readonly string $reportName,\n private readonly string $periodName,\n private readonly string $reportsPageUrl,\n private readonly string $mailSubject,\n ) {\n }\n\n public function build(): Mailable\n {\n $logoCDN = config('logos.cdn.header');\n $fullLogoCDN = config('logos.cdn.footer');\n\n $fromAddress = config('mail.from.address');\n if (config('jiminny.deploy_region') === 'eu') {\n $fromAddress = 'no-reply@jiminny.com';\n }\n\n return $this\n ->from($fromAddress, config('mail.from.name'))\n ->view('emails.reports.report-not-generated', [\n 'reportName' => $this->reportName,\n 'periodName' => $this->periodName,\n 'reportsPageUrl' => $this->reportsPageUrl,\n 'isReport' => true,\n 'headerLogoCdn' => $logoCDN,\n 'footerLogoCdn' => $fullLogoCDN,\n ])\n ->subject($this->mailSubject);\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Mail\\Reports;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Jiminny\\Mail\\Mailable;\n\nclass ReportNotGenerated extends Mailable implements ShouldQueue\n{\n use Queueable;\n use SerializesModels;\n\n public function __construct(\n private readonly string $reportName,\n private readonly string $periodName,\n private readonly string $reportsPageUrl,\n private readonly string $mailSubject,\n ) {\n }\n\n public function build(): Mailable\n {\n $logoCDN = config('logos.cdn.header');\n $fullLogoCDN = config('logos.cdn.footer');\n\n $fromAddress = config('mail.from.address');\n if (config('jiminny.deploy_region') === 'eu') {\n $fromAddress = 'no-reply@jiminny.com';\n }\n\n return $this\n ->from($fromAddress, config('mail.from.name'))\n ->view('emails.reports.report-not-generated', [\n 'reportName' => $this->reportName,\n 'periodName' => $this->periodName,\n 'reportsPageUrl' => $this->reportsPageUrl,\n 'isReport' => true,\n 'headerLogoCdn' => $logoCDN,\n 'footerLogoCdn' => $fullLogoCDN,\n ])\n ->subject($this->mailSubject);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"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},"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},"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},"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},"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},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8828084800201052505
|
-787814697458742428
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\AutomatedReports;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
use Throwable;
class RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use Queueable;
private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';
private const int MIN_ACTIVITIES_COUNT = 1;
public int $tries = 2;
private ?AutomatedReportResult $reportResult = null;
public function __construct(private readonly string $reportUuid)
{
$this->onQueue(Constants::QUEUE_ANALYTICS);
}
public function uniqueId(): string
{
return $this->reportUuid;
}
public function handle(
AutomatedReportsService $reportService,
AskJiminnyReportActivityService $activityService,
ProphetClient $prophetClient,
LoggerInterface $logger,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
): void {
$logger->info(self::LOG_PREFIX . ' Started', [
'automatedReportUuid' => $this->reportUuid,
]);
try {
$automatedReport = $reportService->getReport($this->reportUuid);
if (! $this->validateReport($automatedReport, $logger)) {
return;
}
$creator = $automatedReport->getCreator();
if ($creator === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$savedSearch = $automatedReport->getSavedSearch();
if ($savedSearch === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$prompt = $automatedReport->getAskAnythingPrompt();
if ($prompt === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$this->reportResult = $reportService->getOrCreateReportResult(
automatedReport: $automatedReport,
data: [
'status' => AutomatedReportResult::STATUS_DEFAULT,
'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,
]
);
$activityIds = $activityService->getActivityIdsForSavedSearch(
savedSearch: $savedSearch,
user: $creator,
frequency: $automatedReport->getFrequency(),
);
$logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {
$this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);
$logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
$this->dispatchNotGeneratedNotifications(
$automatedReport,
$reportService,
$urlGenerator,
$jobDispatcher,
$logger,
);
return;
}
$payload = $reportService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $this->reportResult,
activityIds: $activityIds,
);
$this->reportResult->update([
'name' => $reportService->getReportFileName($this->reportResult),
'payload' => $payload,
'status' => AutomatedReportResult::STATUS_REQUESTED,
'requested_at' => Carbon::now()->toDateTimeString(),
]);
$logger->info(self::LOG_PREFIX . ' Request sent', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult->getUuid(),
'payload' => $payload,
]);
$response = $prophetClient->sendRequest(
endpoint: ProphetClient::ASK_JIMINNY_REPORT,
requestArray: $payload,
);
$logger->info(self::LOG_PREFIX . ' Response received', [
'response' => $response->getContent(),
]);
} catch (Throwable $exception) {
$reason = $exception instanceof ProphetException
? AutomatedReportResult::REASON_PROPHET_API_ERROR
: AutomatedReportResult::REASON_DEFAULT;
$this->failReport($reason);
$logger->error(self::LOG_PREFIX . ' Error', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult?->getUuid(),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
if ($this->attempts() < $this->tries) {
$logger->info(self::LOG_PREFIX . ' Retry scheduled', [
'attempts' => $this->attempts(),
]);
$this->release(30);
} else {
$this->fail($exception);
}
}
}
private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool
{
if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {
$logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [
'automatedReportUuid' => $this->reportUuid,
'type' => $automatedReport->getType(),
]);
return false;
}
if (! $automatedReport->getStatus()) {
$logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {
$logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
return true;
}
private function failReport(int $reason): void
{
$this->reportResult?->update([
'status' => AutomatedReportResult::STATUS_FAILED,
'reason' => $reason,
]);
}
private function dispatchNotGeneratedNotifications(
AutomatedReport $automatedReport,
AutomatedReportsService $reportService,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
LoggerInterface $logger,
): void {
if ($this->reportResult === null) {
return;
}
$recipients = $reportService->getValidRecipientUsers($automatedReport);
if (empty($recipients)) {
$logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$reportName = $automatedReport->getCustomName()
?: $reportService->getReportTypeName($this->reportResult);
$periodName = $reportService->getReportPeriodName($this->reportResult);
$reportsPageUrl = $urlGenerator->route('ai.reports.show');
foreach ($recipients as $recipient) {
$jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(
reportUuid: $this->reportResult->getUuid(),
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
reportName: $reportName,
periodName: $periodName,
reportsPageUrl: $reportsPageUrl,
));
}
$logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [
'automatedReportUuid' => $this->reportUuid,
'recipientsCount' => count($recipients),
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Mail\Reports;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Jiminny\Mail\Mailable;
class ReportNotGenerated extends Mailable implements ShouldQueue
{
use Queueable;
use SerializesModels;
public function __construct(
private readonly string $reportName,
private readonly string $periodName,
private readonly string $reportsPageUrl,
private readonly string $mailSubject,
) {
}
public function build(): Mailable
{
$logoCDN = config('logos.cdn.header');
$fullLogoCDN = config('logos.cdn.footer');
$fromAddress = config('mail.from.address');
if (config('jiminny.deploy_region') === 'eu') {
$fromAddress = '[EMAIL]';
}
return $this
->from($fromAddress, config('mail.from.name'))
->view('emails.reports.report-not-generated', [
'reportName' => $this->reportName,
'periodName' => $this->periodName,
'reportsPageUrl' => $this->reportsPageUrl,
'isReport' => true,
'headerLogoCdn' => $logoCDN,
'footerLogoCdn' => $fullLogoCDN,
])
->subject($this->mailSubject);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
64462
|
|
64479
|
1428
|
3
|
2026-04-21T11:16:31.851847+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776770191851_m2.jpg...
|
PhpStorm
|
faVsco.js – ReportNotGenerated.php
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\AutomatedReports;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
use Throwable;
class RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use Queueable;
private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';
private const int MIN_ACTIVITIES_COUNT = 1;
public int $tries = 2;
private ?AutomatedReportResult $reportResult = null;
public function __construct(private readonly string $reportUuid)
{
$this->onQueue(Constants::QUEUE_ANALYTICS);
}
public function uniqueId(): string
{
return $this->reportUuid;
}
public function handle(
AutomatedReportsService $reportService,
AskJiminnyReportActivityService $activityService,
ProphetClient $prophetClient,
LoggerInterface $logger,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
): void {
$logger->info(self::LOG_PREFIX . ' Started', [
'automatedReportUuid' => $this->reportUuid,
]);
try {
$automatedReport = $reportService->getReport($this->reportUuid);
if (! $this->validateReport($automatedReport, $logger)) {
return;
}
$creator = $automatedReport->getCreator();
if ($creator === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$savedSearch = $automatedReport->getSavedSearch();
if ($savedSearch === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$prompt = $automatedReport->getAskAnythingPrompt();
if ($prompt === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$this->reportResult = $reportService->getOrCreateReportResult(
automatedReport: $automatedReport,
data: [
'status' => AutomatedReportResult::STATUS_DEFAULT,
'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,
]
);
$activityIds = $activityService->getActivityIdsForSavedSearch(
savedSearch: $savedSearch,
user: $creator,
frequency: $automatedReport->getFrequency(),
);
$logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {
$this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);
$logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
$this->dispatchNotGeneratedNotifications(
$automatedReport,
$reportService,
$urlGenerator,
$jobDispatcher,
$logger,
);
return;
}
$payload = $reportService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $this->reportResult,
activityIds: $activityIds,
);
$this->reportResult->update([
'name' => $reportService->getReportFileName($this->reportResult),
'payload' => $payload,
'status' => AutomatedReportResult::STATUS_REQUESTED,
'requested_at' => Carbon::now()->toDateTimeString(),
]);
$logger->info(self::LOG_PREFIX . ' Request sent', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult->getUuid(),
'payload' => $payload,
]);
$response = $prophetClient->sendRequest(
endpoint: ProphetClient::ASK_JIMINNY_REPORT,
requestArray: $payload,
);
$logger->info(self::LOG_PREFIX . ' Response received', [
'response' => $response->getContent(),
]);
} catch (Throwable $exception) {
$reason = $exception instanceof ProphetException
? AutomatedReportResult::REASON_PROPHET_API_ERROR
: AutomatedReportResult::REASON_DEFAULT;
$this->failReport($reason);
$logger->error(self::LOG_PREFIX . ' Error', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult?->getUuid(),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
if ($this->attempts() < $this->tries) {
$logger->info(self::LOG_PREFIX . ' Retry scheduled', [
'attempts' => $this->attempts(),
]);
$this->release(30);
} else {
$this->fail($exception);
}
}
}
private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool
{
if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {
$logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [
'automatedReportUuid' => $this->reportUuid,
'type' => $automatedReport->getType(),
]);
return false;
}
if (! $automatedReport->getStatus()) {
$logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {
$logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
return true;
}
private function failReport(int $reason): void
{
$this->reportResult?->update([
'status' => AutomatedReportResult::STATUS_FAILED,
'reason' => $reason,
]);
}
private function dispatchNotGeneratedNotifications(
AutomatedReport $automatedReport,
AutomatedReportsService $reportService,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
LoggerInterface $logger,
): void {
if ($this->reportResult === null) {
return;
}
$recipients = $reportService->getValidRecipientUsers($automatedReport);
if (empty($recipients)) {
$logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$reportName = $automatedReport->getCustomName()
?: $reportService->getReportTypeName($this->reportResult);
$periodName = $reportService->getReportPeriodName($this->reportResult);
$reportsPageUrl = $urlGenerator->route('ai.reports.show');
foreach ($recipients as $recipient) {
$jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(
reportUuid: $this->reportResult->getUuid(),
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
reportName: $reportName,
periodName: $periodName,
reportsPageUrl: $reportsPageUrl,
));
}
$logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [
'automatedReportUuid' => $this->reportUuid,
'recipientsCount' => count($recipients),
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Mail\Reports;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Jiminny\Mail\Mailable;
class ReportNotGenerated extends Mailable implements ShouldQueue
{
use Queueable;
use SerializesModels;
public function __construct(
private readonly string $reportName,
private readonly string $periodName,
private readonly string $reportsPageUrl,
private readonly string $mailSubject,
) {
}
public function build(): Mailable
{
$logoCDN = config('logos.cdn.header');
$fullLogoCDN = config('logos.cdn.footer');
$fromAddress = config('mail.from.address');
if (config('jiminny.deploy_region') === 'eu') {
$fromAddress = '[EMAIL]';
}
return $this
->from($fromAddress, config('mail.from.name'))
->view('emails.reports.report-not-generated', [
'reportName' => $this->reportName,
'periodName' => $this->periodName,
'reportsPageUrl' => $this->reportsPageUrl,
'isReport' => true,
'headerLogoCdn' => $logoCDN,
'footerLogoCdn' => $fullLogoCDN,
])
->subject($this->mailSubject);
}
}
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},"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.12732713,"height":0.025538707},"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"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},"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},"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},"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},"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},"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},"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},"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},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\AutomatedReports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\ProphetAi\\Exceptions\\ProphetException;\nuse Jiminny\\Component\\ProphetAi\\ProphetClient;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\nuse Throwable;\n\nclass RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use Queueable;\n\n private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';\n\n private const int MIN_ACTIVITIES_COUNT = 1;\n\n public int $tries = 2;\n\n private ?AutomatedReportResult $reportResult = null;\n\n public function __construct(private readonly string $reportUuid)\n {\n $this->onQueue(Constants::QUEUE_ANALYTICS);\n }\n\n public function uniqueId(): string\n {\n return $this->reportUuid;\n }\n\n public function handle(\n AutomatedReportsService $reportService,\n AskJiminnyReportActivityService $activityService,\n ProphetClient $prophetClient,\n LoggerInterface $logger,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n ): void {\n $logger->info(self::LOG_PREFIX . ' Started', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n try {\n $automatedReport = $reportService->getReport($this->reportUuid);\n\n if (! $this->validateReport($automatedReport, $logger)) {\n return;\n }\n\n $creator = $automatedReport->getCreator();\n if ($creator === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $savedSearch = $automatedReport->getSavedSearch();\n if ($savedSearch === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $prompt = $automatedReport->getAskAnythingPrompt();\n if ($prompt === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $this->reportResult = $reportService->getOrCreateReportResult(\n automatedReport: $automatedReport,\n data: [\n 'status' => AutomatedReportResult::STATUS_DEFAULT,\n 'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,\n ]\n );\n\n $activityIds = $activityService->getActivityIdsForSavedSearch(\n savedSearch: $savedSearch,\n user: $creator,\n frequency: $automatedReport->getFrequency(),\n );\n\n $logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {\n $this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);\n\n $logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n $this->dispatchNotGeneratedNotifications(\n $automatedReport,\n $reportService,\n $urlGenerator,\n $jobDispatcher,\n $logger,\n );\n\n return;\n }\n\n $payload = $reportService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $this->reportResult,\n activityIds: $activityIds,\n );\n\n $this->reportResult->update([\n 'name' => $reportService->getReportFileName($this->reportResult),\n 'payload' => $payload,\n 'status' => AutomatedReportResult::STATUS_REQUESTED,\n 'requested_at' => Carbon::now()->toDateTimeString(),\n ]);\n\n $logger->info(self::LOG_PREFIX . ' Request sent', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult->getUuid(),\n 'payload' => $payload,\n ]);\n\n $response = $prophetClient->sendRequest(\n endpoint: ProphetClient::ASK_JIMINNY_REPORT,\n requestArray: $payload,\n );\n\n $logger->info(self::LOG_PREFIX . ' Response received', [\n 'response' => $response->getContent(),\n ]);\n } catch (Throwable $exception) {\n $reason = $exception instanceof ProphetException\n ? AutomatedReportResult::REASON_PROPHET_API_ERROR\n : AutomatedReportResult::REASON_DEFAULT;\n\n $this->failReport($reason);\n\n $logger->error(self::LOG_PREFIX . ' Error', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult?->getUuid(),\n 'code' => $exception->getCode(),\n 'message' => $exception->getMessage(),\n ]);\n\n if ($this->attempts() < $this->tries) {\n $logger->info(self::LOG_PREFIX . ' Retry scheduled', [\n 'attempts' => $this->attempts(),\n ]);\n\n $this->release(30);\n } else {\n $this->fail($exception);\n }\n }\n }\n\n private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool\n {\n if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [\n 'automatedReportUuid' => $this->reportUuid,\n 'type' => $automatedReport->getType(),\n ]);\n\n return false;\n }\n\n if (! $automatedReport->getStatus()) {\n $logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {\n $logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n return true;\n }\n\n private function failReport(int $reason): void\n {\n $this->reportResult?->update([\n 'status' => AutomatedReportResult::STATUS_FAILED,\n 'reason' => $reason,\n ]);\n }\n\n private function dispatchNotGeneratedNotifications(\n AutomatedReport $automatedReport,\n AutomatedReportsService $reportService,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n LoggerInterface $logger,\n ): void {\n if ($this->reportResult === null) {\n return;\n }\n\n $recipients = $reportService->getValidRecipientUsers($automatedReport);\n if (empty($recipients)) {\n $logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $reportName = $automatedReport->getCustomName()\n ?: $reportService->getReportTypeName($this->reportResult);\n $periodName = $reportService->getReportPeriodName($this->reportResult);\n $reportsPageUrl = $urlGenerator->route('ai.reports.show');\n\n foreach ($recipients as $recipient) {\n $jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(\n reportUuid: $this->reportResult->getUuid(),\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n reportName: $reportName,\n periodName: $periodName,\n reportsPageUrl: $reportsPageUrl,\n ));\n }\n\n $logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [\n 'automatedReportUuid' => $this->reportUuid,\n 'recipientsCount' => count($recipients),\n ]);\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\AutomatedReports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\ProphetAi\\Exceptions\\ProphetException;\nuse Jiminny\\Component\\ProphetAi\\ProphetClient;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\nuse Throwable;\n\nclass RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use Queueable;\n\n private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';\n\n private const int MIN_ACTIVITIES_COUNT = 1;\n\n public int $tries = 2;\n\n private ?AutomatedReportResult $reportResult = null;\n\n public function __construct(private readonly string $reportUuid)\n {\n $this->onQueue(Constants::QUEUE_ANALYTICS);\n }\n\n public function uniqueId(): string\n {\n return $this->reportUuid;\n }\n\n public function handle(\n AutomatedReportsService $reportService,\n AskJiminnyReportActivityService $activityService,\n ProphetClient $prophetClient,\n LoggerInterface $logger,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n ): void {\n $logger->info(self::LOG_PREFIX . ' Started', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n try {\n $automatedReport = $reportService->getReport($this->reportUuid);\n\n if (! $this->validateReport($automatedReport, $logger)) {\n return;\n }\n\n $creator = $automatedReport->getCreator();\n if ($creator === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $savedSearch = $automatedReport->getSavedSearch();\n if ($savedSearch === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $prompt = $automatedReport->getAskAnythingPrompt();\n if ($prompt === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $this->reportResult = $reportService->getOrCreateReportResult(\n automatedReport: $automatedReport,\n data: [\n 'status' => AutomatedReportResult::STATUS_DEFAULT,\n 'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,\n ]\n );\n\n $activityIds = $activityService->getActivityIdsForSavedSearch(\n savedSearch: $savedSearch,\n user: $creator,\n frequency: $automatedReport->getFrequency(),\n );\n\n $logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {\n $this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);\n\n $logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n $this->dispatchNotGeneratedNotifications(\n $automatedReport,\n $reportService,\n $urlGenerator,\n $jobDispatcher,\n $logger,\n );\n\n return;\n }\n\n $payload = $reportService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $this->reportResult,\n activityIds: $activityIds,\n );\n\n $this->reportResult->update([\n 'name' => $reportService->getReportFileName($this->reportResult),\n 'payload' => $payload,\n 'status' => AutomatedReportResult::STATUS_REQUESTED,\n 'requested_at' => Carbon::now()->toDateTimeString(),\n ]);\n\n $logger->info(self::LOG_PREFIX . ' Request sent', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult->getUuid(),\n 'payload' => $payload,\n ]);\n\n $response = $prophetClient->sendRequest(\n endpoint: ProphetClient::ASK_JIMINNY_REPORT,\n requestArray: $payload,\n );\n\n $logger->info(self::LOG_PREFIX . ' Response received', [\n 'response' => $response->getContent(),\n ]);\n } catch (Throwable $exception) {\n $reason = $exception instanceof ProphetException\n ? AutomatedReportResult::REASON_PROPHET_API_ERROR\n : AutomatedReportResult::REASON_DEFAULT;\n\n $this->failReport($reason);\n\n $logger->error(self::LOG_PREFIX . ' Error', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult?->getUuid(),\n 'code' => $exception->getCode(),\n 'message' => $exception->getMessage(),\n ]);\n\n if ($this->attempts() < $this->tries) {\n $logger->info(self::LOG_PREFIX . ' Retry scheduled', [\n 'attempts' => $this->attempts(),\n ]);\n\n $this->release(30);\n } else {\n $this->fail($exception);\n }\n }\n }\n\n private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool\n {\n if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [\n 'automatedReportUuid' => $this->reportUuid,\n 'type' => $automatedReport->getType(),\n ]);\n\n return false;\n }\n\n if (! $automatedReport->getStatus()) {\n $logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {\n $logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n return true;\n }\n\n private function failReport(int $reason): void\n {\n $this->reportResult?->update([\n 'status' => AutomatedReportResult::STATUS_FAILED,\n 'reason' => $reason,\n ]);\n }\n\n private function dispatchNotGeneratedNotifications(\n AutomatedReport $automatedReport,\n AutomatedReportsService $reportService,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n LoggerInterface $logger,\n ): void {\n if ($this->reportResult === null) {\n return;\n }\n\n $recipients = $reportService->getValidRecipientUsers($automatedReport);\n if (empty($recipients)) {\n $logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $reportName = $automatedReport->getCustomName()\n ?: $reportService->getReportTypeName($this->reportResult);\n $periodName = $reportService->getReportPeriodName($this->reportResult);\n $reportsPageUrl = $urlGenerator->route('ai.reports.show');\n\n foreach ($recipients as $recipient) {\n $jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(\n reportUuid: $this->reportResult->getUuid(),\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n reportName: $reportName,\n periodName: $periodName,\n reportsPageUrl: $reportsPageUrl,\n ));\n }\n\n $logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [\n 'automatedReportUuid' => $this->reportUuid,\n 'recipientsCount' => count($recipients),\n ]);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"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},"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},"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},"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\\Mail\\Reports;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Jiminny\\Mail\\Mailable;\n\nclass ReportNotGenerated extends Mailable implements ShouldQueue\n{\n use Queueable;\n use SerializesModels;\n\n public function __construct(\n private readonly string $reportName,\n private readonly string $periodName,\n private readonly string $reportsPageUrl,\n private readonly string $mailSubject,\n ) {\n }\n\n public function build(): Mailable\n {\n $logoCDN = config('logos.cdn.header');\n $fullLogoCDN = config('logos.cdn.footer');\n\n $fromAddress = config('mail.from.address');\n if (config('jiminny.deploy_region') === 'eu') {\n $fromAddress = 'no-reply@jiminny.com';\n }\n\n return $this\n ->from($fromAddress, config('mail.from.name'))\n ->view('emails.reports.report-not-generated', [\n 'reportName' => $this->reportName,\n 'periodName' => $this->periodName,\n 'reportsPageUrl' => $this->reportsPageUrl,\n 'isReport' => true,\n 'headerLogoCdn' => $logoCDN,\n 'footerLogoCdn' => $fullLogoCDN,\n ])\n ->subject($this->mailSubject);\n }\n}","depth":4,"bounds":{"left":0.40425533,"top":0.12210695,"width":0.2862367,"height":0.87789303},"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Mail\\Reports;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Jiminny\\Mail\\Mailable;\n\nclass ReportNotGenerated extends Mailable implements ShouldQueue\n{\n use Queueable;\n use SerializesModels;\n\n public function __construct(\n private readonly string $reportName,\n private readonly string $periodName,\n private readonly string $reportsPageUrl,\n private readonly string $mailSubject,\n ) {\n }\n\n public function build(): Mailable\n {\n $logoCDN = config('logos.cdn.header');\n $fullLogoCDN = config('logos.cdn.footer');\n\n $fromAddress = config('mail.from.address');\n if (config('jiminny.deploy_region') === 'eu') {\n $fromAddress = 'no-reply@jiminny.com';\n }\n\n return $this\n ->from($fromAddress, config('mail.from.name'))\n ->view('emails.reports.report-not-generated', [\n 'reportName' => $this->reportName,\n 'periodName' => $this->periodName,\n 'reportsPageUrl' => $this->reportsPageUrl,\n 'isReport' => true,\n 'headerLogoCdn' => $logoCDN,\n 'footerLogoCdn' => $fullLogoCDN,\n ])\n ->subject($this->mailSubject);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"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},"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},"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},"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},"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},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8828084800201052505
|
-787814697458742428
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\AutomatedReports;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
use Throwable;
class RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use Queueable;
private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';
private const int MIN_ACTIVITIES_COUNT = 1;
public int $tries = 2;
private ?AutomatedReportResult $reportResult = null;
public function __construct(private readonly string $reportUuid)
{
$this->onQueue(Constants::QUEUE_ANALYTICS);
}
public function uniqueId(): string
{
return $this->reportUuid;
}
public function handle(
AutomatedReportsService $reportService,
AskJiminnyReportActivityService $activityService,
ProphetClient $prophetClient,
LoggerInterface $logger,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
): void {
$logger->info(self::LOG_PREFIX . ' Started', [
'automatedReportUuid' => $this->reportUuid,
]);
try {
$automatedReport = $reportService->getReport($this->reportUuid);
if (! $this->validateReport($automatedReport, $logger)) {
return;
}
$creator = $automatedReport->getCreator();
if ($creator === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$savedSearch = $automatedReport->getSavedSearch();
if ($savedSearch === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$prompt = $automatedReport->getAskAnythingPrompt();
if ($prompt === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$this->reportResult = $reportService->getOrCreateReportResult(
automatedReport: $automatedReport,
data: [
'status' => AutomatedReportResult::STATUS_DEFAULT,
'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,
]
);
$activityIds = $activityService->getActivityIdsForSavedSearch(
savedSearch: $savedSearch,
user: $creator,
frequency: $automatedReport->getFrequency(),
);
$logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {
$this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);
$logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
$this->dispatchNotGeneratedNotifications(
$automatedReport,
$reportService,
$urlGenerator,
$jobDispatcher,
$logger,
);
return;
}
$payload = $reportService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $this->reportResult,
activityIds: $activityIds,
);
$this->reportResult->update([
'name' => $reportService->getReportFileName($this->reportResult),
'payload' => $payload,
'status' => AutomatedReportResult::STATUS_REQUESTED,
'requested_at' => Carbon::now()->toDateTimeString(),
]);
$logger->info(self::LOG_PREFIX . ' Request sent', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult->getUuid(),
'payload' => $payload,
]);
$response = $prophetClient->sendRequest(
endpoint: ProphetClient::ASK_JIMINNY_REPORT,
requestArray: $payload,
);
$logger->info(self::LOG_PREFIX . ' Response received', [
'response' => $response->getContent(),
]);
} catch (Throwable $exception) {
$reason = $exception instanceof ProphetException
? AutomatedReportResult::REASON_PROPHET_API_ERROR
: AutomatedReportResult::REASON_DEFAULT;
$this->failReport($reason);
$logger->error(self::LOG_PREFIX . ' Error', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult?->getUuid(),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
if ($this->attempts() < $this->tries) {
$logger->info(self::LOG_PREFIX . ' Retry scheduled', [
'attempts' => $this->attempts(),
]);
$this->release(30);
} else {
$this->fail($exception);
}
}
}
private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool
{
if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {
$logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [
'automatedReportUuid' => $this->reportUuid,
'type' => $automatedReport->getType(),
]);
return false;
}
if (! $automatedReport->getStatus()) {
$logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {
$logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
return true;
}
private function failReport(int $reason): void
{
$this->reportResult?->update([
'status' => AutomatedReportResult::STATUS_FAILED,
'reason' => $reason,
]);
}
private function dispatchNotGeneratedNotifications(
AutomatedReport $automatedReport,
AutomatedReportsService $reportService,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
LoggerInterface $logger,
): void {
if ($this->reportResult === null) {
return;
}
$recipients = $reportService->getValidRecipientUsers($automatedReport);
if (empty($recipients)) {
$logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$reportName = $automatedReport->getCustomName()
?: $reportService->getReportTypeName($this->reportResult);
$periodName = $reportService->getReportPeriodName($this->reportResult);
$reportsPageUrl = $urlGenerator->route('ai.reports.show');
foreach ($recipients as $recipient) {
$jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(
reportUuid: $this->reportResult->getUuid(),
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
reportName: $reportName,
periodName: $periodName,
reportsPageUrl: $reportsPageUrl,
));
}
$logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [
'automatedReportUuid' => $this->reportUuid,
'recipientsCount' => count($recipients),
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Mail\Reports;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Jiminny\Mail\Mailable;
class ReportNotGenerated extends Mailable implements ShouldQueue
{
use Queueable;
use SerializesModels;
public function __construct(
private readonly string $reportName,
private readonly string $periodName,
private readonly string $reportsPageUrl,
private readonly string $mailSubject,
) {
}
public function build(): Mailable
{
$logoCDN = config('logos.cdn.header');
$fullLogoCDN = config('logos.cdn.footer');
$fromAddress = config('mail.from.address');
if (config('jiminny.deploy_region') === 'eu') {
$fromAddress = '[EMAIL]';
}
return $this
->from($fromAddress, config('mail.from.name'))
->view('emails.reports.report-not-generated', [
'reportName' => $this->reportName,
'periodName' => $this->periodName,
'reportsPageUrl' => $this->reportsPageUrl,
'isReport' => true,
'headerLogoCdn' => $logoCDN,
'footerLogoCdn' => $fullLogoCDN,
])
->subject($this->mailSubject);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
64478
|
|
64480
|
1427
|
3
|
2026-04-21T11:16:33.426238+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776770193426_m1.jpg...
|
PhpStorm
|
faVsco.js – ReportNotGenerated.php
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\AutomatedReports;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
use Throwable;
class RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use Queueable;
private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';
private const int MIN_ACTIVITIES_COUNT = 1;
public int $tries = 2;
private ?AutomatedReportResult $reportResult = null;
public function __construct(private readonly string $reportUuid)
{
$this->onQueue(Constants::QUEUE_ANALYTICS);
}
public function uniqueId(): string
{
return $this->reportUuid;
}
public function handle(
AutomatedReportsService $reportService,
AskJiminnyReportActivityService $activityService,
ProphetClient $prophetClient,
LoggerInterface $logger,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
): void {
$logger->info(self::LOG_PREFIX . ' Started', [
'automatedReportUuid' => $this->reportUuid,
]);
try {
$automatedReport = $reportService->getReport($this->reportUuid);
if (! $this->validateReport($automatedReport, $logger)) {
return;
}
$creator = $automatedReport->getCreator();
if ($creator === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$savedSearch = $automatedReport->getSavedSearch();
if ($savedSearch === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$prompt = $automatedReport->getAskAnythingPrompt();
if ($prompt === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$this->reportResult = $reportService->getOrCreateReportResult(
automatedReport: $automatedReport,
data: [
'status' => AutomatedReportResult::STATUS_DEFAULT,
'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,
]
);
$activityIds = $activityService->getActivityIdsForSavedSearch(
savedSearch: $savedSearch,
user: $creator,
frequency: $automatedReport->getFrequency(),
);
$logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {
$this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);
$logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
$this->dispatchNotGeneratedNotifications(
$automatedReport,
$reportService,
$urlGenerator,
$jobDispatcher,
$logger,
);
return;
}
$payload = $reportService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $this->reportResult,
activityIds: $activityIds,
);
$this->reportResult->update([
'name' => $reportService->getReportFileName($this->reportResult),
'payload' => $payload,
'status' => AutomatedReportResult::STATUS_REQUESTED,
'requested_at' => Carbon::now()->toDateTimeString(),
]);
$logger->info(self::LOG_PREFIX . ' Request sent', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult->getUuid(),
'payload' => $payload,
]);
$response = $prophetClient->sendRequest(
endpoint: ProphetClient::ASK_JIMINNY_REPORT,
requestArray: $payload,
);
$logger->info(self::LOG_PREFIX . ' Response received', [
'response' => $response->getContent(),
]);
} catch (Throwable $exception) {
$reason = $exception instanceof ProphetException
? AutomatedReportResult::REASON_PROPHET_API_ERROR
: AutomatedReportResult::REASON_DEFAULT;
$this->failReport($reason);
$logger->error(self::LOG_PREFIX . ' Error', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult?->getUuid(),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
if ($this->attempts() < $this->tries) {
$logger->info(self::LOG_PREFIX . ' Retry scheduled', [
'attempts' => $this->attempts(),
]);
$this->release(30);
} else {
$this->fail($exception);
}
}
}
private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool
{
if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {
$logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [
'automatedReportUuid' => $this->reportUuid,
'type' => $automatedReport->getType(),
]);
return false;
}
if (! $automatedReport->getStatus()) {
$logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {
$logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
return true;
}
private function failReport(int $reason): void
{
$this->reportResult?->update([
'status' => AutomatedReportResult::STATUS_FAILED,
'reason' => $reason,
]);
}
private function dispatchNotGeneratedNotifications(
AutomatedReport $automatedReport,
AutomatedReportsService $reportService,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
LoggerInterface $logger,
): void {
if ($this->reportResult === null) {
return;
}
$recipients = $reportService->getValidRecipientUsers($automatedReport);
if (empty($recipients)) {
$logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$reportName = $automatedReport->getCustomName()
?: $reportService->getReportTypeName($this->reportResult);
$periodName = $reportService->getReportPeriodName($this->reportResult);
$reportsPageUrl = $urlGenerator->route('ai.reports.show');
foreach ($recipients as $recipient) {
$jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(
reportUuid: $this->reportResult->getUuid(),
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
reportName: $reportName,
periodName: $periodName,
reportsPageUrl: $reportsPageUrl,
));
}
$logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [
'automatedReportUuid' => $this->reportUuid,
'recipientsCount' => count($recipients),
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Mail\Reports;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Jiminny\Mail\Mailable;
class ReportNotGenerated extends Mailable implements ShouldQueue
{
use Queueable;
use SerializesModels;
public function __construct(
private readonly string $reportName,
private readonly string $periodName,
private readonly string $reportsPageUrl,
private readonly string $mailSubject,
) {
}
public function build(): Mailable
{
$logoCDN = config('logos.cdn.header');
$fullLogoCDN = config('logos.cdn.footer');
$fromAddress = config('mail.from.address');
if (config('jiminny.deploy_region') === 'eu') {
$fromAddress = '[EMAIL]';
}
return $this
->from($fromAddress, config('mail.from.name'))
->view('emails.reports.report-not-generated', [
'reportName' => $this->reportName,
'periodName' => $this->periodName,
'reportsPageUrl' => $this->reportsPageUrl,
'isReport' => true,
'headerLogoCdn' => $logoCDN,
'footerLogoCdn' => $fullLogoCDN,
])
->subject($this->mailSubject);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"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},"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},"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},"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},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\AutomatedReports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\ProphetAi\\Exceptions\\ProphetException;\nuse Jiminny\\Component\\ProphetAi\\ProphetClient;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\nuse Throwable;\n\nclass RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use Queueable;\n\n private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';\n\n private const int MIN_ACTIVITIES_COUNT = 1;\n\n public int $tries = 2;\n\n private ?AutomatedReportResult $reportResult = null;\n\n public function __construct(private readonly string $reportUuid)\n {\n $this->onQueue(Constants::QUEUE_ANALYTICS);\n }\n\n public function uniqueId(): string\n {\n return $this->reportUuid;\n }\n\n public function handle(\n AutomatedReportsService $reportService,\n AskJiminnyReportActivityService $activityService,\n ProphetClient $prophetClient,\n LoggerInterface $logger,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n ): void {\n $logger->info(self::LOG_PREFIX . ' Started', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n try {\n $automatedReport = $reportService->getReport($this->reportUuid);\n\n if (! $this->validateReport($automatedReport, $logger)) {\n return;\n }\n\n $creator = $automatedReport->getCreator();\n if ($creator === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $savedSearch = $automatedReport->getSavedSearch();\n if ($savedSearch === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $prompt = $automatedReport->getAskAnythingPrompt();\n if ($prompt === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $this->reportResult = $reportService->getOrCreateReportResult(\n automatedReport: $automatedReport,\n data: [\n 'status' => AutomatedReportResult::STATUS_DEFAULT,\n 'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,\n ]\n );\n\n $activityIds = $activityService->getActivityIdsForSavedSearch(\n savedSearch: $savedSearch,\n user: $creator,\n frequency: $automatedReport->getFrequency(),\n );\n\n $logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {\n $this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);\n\n $logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n $this->dispatchNotGeneratedNotifications(\n $automatedReport,\n $reportService,\n $urlGenerator,\n $jobDispatcher,\n $logger,\n );\n\n return;\n }\n\n $payload = $reportService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $this->reportResult,\n activityIds: $activityIds,\n );\n\n $this->reportResult->update([\n 'name' => $reportService->getReportFileName($this->reportResult),\n 'payload' => $payload,\n 'status' => AutomatedReportResult::STATUS_REQUESTED,\n 'requested_at' => Carbon::now()->toDateTimeString(),\n ]);\n\n $logger->info(self::LOG_PREFIX . ' Request sent', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult->getUuid(),\n 'payload' => $payload,\n ]);\n\n $response = $prophetClient->sendRequest(\n endpoint: ProphetClient::ASK_JIMINNY_REPORT,\n requestArray: $payload,\n );\n\n $logger->info(self::LOG_PREFIX . ' Response received', [\n 'response' => $response->getContent(),\n ]);\n } catch (Throwable $exception) {\n $reason = $exception instanceof ProphetException\n ? AutomatedReportResult::REASON_PROPHET_API_ERROR\n : AutomatedReportResult::REASON_DEFAULT;\n\n $this->failReport($reason);\n\n $logger->error(self::LOG_PREFIX . ' Error', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult?->getUuid(),\n 'code' => $exception->getCode(),\n 'message' => $exception->getMessage(),\n ]);\n\n if ($this->attempts() < $this->tries) {\n $logger->info(self::LOG_PREFIX . ' Retry scheduled', [\n 'attempts' => $this->attempts(),\n ]);\n\n $this->release(30);\n } else {\n $this->fail($exception);\n }\n }\n }\n\n private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool\n {\n if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [\n 'automatedReportUuid' => $this->reportUuid,\n 'type' => $automatedReport->getType(),\n ]);\n\n return false;\n }\n\n if (! $automatedReport->getStatus()) {\n $logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {\n $logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n return true;\n }\n\n private function failReport(int $reason): void\n {\n $this->reportResult?->update([\n 'status' => AutomatedReportResult::STATUS_FAILED,\n 'reason' => $reason,\n ]);\n }\n\n private function dispatchNotGeneratedNotifications(\n AutomatedReport $automatedReport,\n AutomatedReportsService $reportService,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n LoggerInterface $logger,\n ): void {\n if ($this->reportResult === null) {\n return;\n }\n\n $recipients = $reportService->getValidRecipientUsers($automatedReport);\n if (empty($recipients)) {\n $logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $reportName = $automatedReport->getCustomName()\n ?: $reportService->getReportTypeName($this->reportResult);\n $periodName = $reportService->getReportPeriodName($this->reportResult);\n $reportsPageUrl = $urlGenerator->route('ai.reports.show');\n\n foreach ($recipients as $recipient) {\n $jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(\n reportUuid: $this->reportResult->getUuid(),\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n reportName: $reportName,\n periodName: $periodName,\n reportsPageUrl: $reportsPageUrl,\n ));\n }\n\n $logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [\n 'automatedReportUuid' => $this->reportUuid,\n 'recipientsCount' => count($recipients),\n ]);\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\AutomatedReports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\ProphetAi\\Exceptions\\ProphetException;\nuse Jiminny\\Component\\ProphetAi\\ProphetClient;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\nuse Throwable;\n\nclass RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use Queueable;\n\n private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';\n\n private const int MIN_ACTIVITIES_COUNT = 1;\n\n public int $tries = 2;\n\n private ?AutomatedReportResult $reportResult = null;\n\n public function __construct(private readonly string $reportUuid)\n {\n $this->onQueue(Constants::QUEUE_ANALYTICS);\n }\n\n public function uniqueId(): string\n {\n return $this->reportUuid;\n }\n\n public function handle(\n AutomatedReportsService $reportService,\n AskJiminnyReportActivityService $activityService,\n ProphetClient $prophetClient,\n LoggerInterface $logger,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n ): void {\n $logger->info(self::LOG_PREFIX . ' Started', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n try {\n $automatedReport = $reportService->getReport($this->reportUuid);\n\n if (! $this->validateReport($automatedReport, $logger)) {\n return;\n }\n\n $creator = $automatedReport->getCreator();\n if ($creator === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $savedSearch = $automatedReport->getSavedSearch();\n if ($savedSearch === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $prompt = $automatedReport->getAskAnythingPrompt();\n if ($prompt === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $this->reportResult = $reportService->getOrCreateReportResult(\n automatedReport: $automatedReport,\n data: [\n 'status' => AutomatedReportResult::STATUS_DEFAULT,\n 'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,\n ]\n );\n\n $activityIds = $activityService->getActivityIdsForSavedSearch(\n savedSearch: $savedSearch,\n user: $creator,\n frequency: $automatedReport->getFrequency(),\n );\n\n $logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {\n $this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);\n\n $logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n $this->dispatchNotGeneratedNotifications(\n $automatedReport,\n $reportService,\n $urlGenerator,\n $jobDispatcher,\n $logger,\n );\n\n return;\n }\n\n $payload = $reportService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $this->reportResult,\n activityIds: $activityIds,\n );\n\n $this->reportResult->update([\n 'name' => $reportService->getReportFileName($this->reportResult),\n 'payload' => $payload,\n 'status' => AutomatedReportResult::STATUS_REQUESTED,\n 'requested_at' => Carbon::now()->toDateTimeString(),\n ]);\n\n $logger->info(self::LOG_PREFIX . ' Request sent', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult->getUuid(),\n 'payload' => $payload,\n ]);\n\n $response = $prophetClient->sendRequest(\n endpoint: ProphetClient::ASK_JIMINNY_REPORT,\n requestArray: $payload,\n );\n\n $logger->info(self::LOG_PREFIX . ' Response received', [\n 'response' => $response->getContent(),\n ]);\n } catch (Throwable $exception) {\n $reason = $exception instanceof ProphetException\n ? AutomatedReportResult::REASON_PROPHET_API_ERROR\n : AutomatedReportResult::REASON_DEFAULT;\n\n $this->failReport($reason);\n\n $logger->error(self::LOG_PREFIX . ' Error', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult?->getUuid(),\n 'code' => $exception->getCode(),\n 'message' => $exception->getMessage(),\n ]);\n\n if ($this->attempts() < $this->tries) {\n $logger->info(self::LOG_PREFIX . ' Retry scheduled', [\n 'attempts' => $this->attempts(),\n ]);\n\n $this->release(30);\n } else {\n $this->fail($exception);\n }\n }\n }\n\n private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool\n {\n if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [\n 'automatedReportUuid' => $this->reportUuid,\n 'type' => $automatedReport->getType(),\n ]);\n\n return false;\n }\n\n if (! $automatedReport->getStatus()) {\n $logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {\n $logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n return true;\n }\n\n private function failReport(int $reason): void\n {\n $this->reportResult?->update([\n 'status' => AutomatedReportResult::STATUS_FAILED,\n 'reason' => $reason,\n ]);\n }\n\n private function dispatchNotGeneratedNotifications(\n AutomatedReport $automatedReport,\n AutomatedReportsService $reportService,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n LoggerInterface $logger,\n ): void {\n if ($this->reportResult === null) {\n return;\n }\n\n $recipients = $reportService->getValidRecipientUsers($automatedReport);\n if (empty($recipients)) {\n $logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $reportName = $automatedReport->getCustomName()\n ?: $reportService->getReportTypeName($this->reportResult);\n $periodName = $reportService->getReportPeriodName($this->reportResult);\n $reportsPageUrl = $urlGenerator->route('ai.reports.show');\n\n foreach ($recipients as $recipient) {\n $jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(\n reportUuid: $this->reportResult->getUuid(),\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n reportName: $reportName,\n periodName: $periodName,\n reportsPageUrl: $reportsPageUrl,\n ));\n }\n\n $logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [\n 'automatedReportUuid' => $this->reportUuid,\n 'recipientsCount' => count($recipients),\n ]);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"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},"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},"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},"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\\Mail\\Reports;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Jiminny\\Mail\\Mailable;\n\nclass ReportNotGenerated extends Mailable implements ShouldQueue\n{\n use Queueable;\n use SerializesModels;\n\n public function __construct(\n private readonly string $reportName,\n private readonly string $periodName,\n private readonly string $reportsPageUrl,\n private readonly string $mailSubject,\n ) {\n }\n\n public function build(): Mailable\n {\n $logoCDN = config('logos.cdn.header');\n $fullLogoCDN = config('logos.cdn.footer');\n\n $fromAddress = config('mail.from.address');\n if (config('jiminny.deploy_region') === 'eu') {\n $fromAddress = 'no-reply@jiminny.com';\n }\n\n return $this\n ->from($fromAddress, config('mail.from.name'))\n ->view('emails.reports.report-not-generated', [\n 'reportName' => $this->reportName,\n 'periodName' => $this->periodName,\n 'reportsPageUrl' => $this->reportsPageUrl,\n 'isReport' => true,\n 'headerLogoCdn' => $logoCDN,\n 'footerLogoCdn' => $fullLogoCDN,\n ])\n ->subject($this->mailSubject);\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Mail\\Reports;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Jiminny\\Mail\\Mailable;\n\nclass ReportNotGenerated extends Mailable implements ShouldQueue\n{\n use Queueable;\n use SerializesModels;\n\n public function __construct(\n private readonly string $reportName,\n private readonly string $periodName,\n private readonly string $reportsPageUrl,\n private readonly string $mailSubject,\n ) {\n }\n\n public function build(): Mailable\n {\n $logoCDN = config('logos.cdn.header');\n $fullLogoCDN = config('logos.cdn.footer');\n\n $fromAddress = config('mail.from.address');\n if (config('jiminny.deploy_region') === 'eu') {\n $fromAddress = 'no-reply@jiminny.com';\n }\n\n return $this\n ->from($fromAddress, config('mail.from.name'))\n ->view('emails.reports.report-not-generated', [\n 'reportName' => $this->reportName,\n 'periodName' => $this->periodName,\n 'reportsPageUrl' => $this->reportsPageUrl,\n 'isReport' => true,\n 'headerLogoCdn' => $logoCDN,\n 'footerLogoCdn' => $fullLogoCDN,\n ])\n ->subject($this->mailSubject);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"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},"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},"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},"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},"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},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8828084800201052505
|
-787814697458742428
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\AutomatedReports;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
use Throwable;
class RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use Queueable;
private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';
private const int MIN_ACTIVITIES_COUNT = 1;
public int $tries = 2;
private ?AutomatedReportResult $reportResult = null;
public function __construct(private readonly string $reportUuid)
{
$this->onQueue(Constants::QUEUE_ANALYTICS);
}
public function uniqueId(): string
{
return $this->reportUuid;
}
public function handle(
AutomatedReportsService $reportService,
AskJiminnyReportActivityService $activityService,
ProphetClient $prophetClient,
LoggerInterface $logger,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
): void {
$logger->info(self::LOG_PREFIX . ' Started', [
'automatedReportUuid' => $this->reportUuid,
]);
try {
$automatedReport = $reportService->getReport($this->reportUuid);
if (! $this->validateReport($automatedReport, $logger)) {
return;
}
$creator = $automatedReport->getCreator();
if ($creator === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$savedSearch = $automatedReport->getSavedSearch();
if ($savedSearch === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$prompt = $automatedReport->getAskAnythingPrompt();
if ($prompt === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$this->reportResult = $reportService->getOrCreateReportResult(
automatedReport: $automatedReport,
data: [
'status' => AutomatedReportResult::STATUS_DEFAULT,
'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,
]
);
$activityIds = $activityService->getActivityIdsForSavedSearch(
savedSearch: $savedSearch,
user: $creator,
frequency: $automatedReport->getFrequency(),
);
$logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {
$this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);
$logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
$this->dispatchNotGeneratedNotifications(
$automatedReport,
$reportService,
$urlGenerator,
$jobDispatcher,
$logger,
);
return;
}
$payload = $reportService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $this->reportResult,
activityIds: $activityIds,
);
$this->reportResult->update([
'name' => $reportService->getReportFileName($this->reportResult),
'payload' => $payload,
'status' => AutomatedReportResult::STATUS_REQUESTED,
'requested_at' => Carbon::now()->toDateTimeString(),
]);
$logger->info(self::LOG_PREFIX . ' Request sent', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult->getUuid(),
'payload' => $payload,
]);
$response = $prophetClient->sendRequest(
endpoint: ProphetClient::ASK_JIMINNY_REPORT,
requestArray: $payload,
);
$logger->info(self::LOG_PREFIX . ' Response received', [
'response' => $response->getContent(),
]);
} catch (Throwable $exception) {
$reason = $exception instanceof ProphetException
? AutomatedReportResult::REASON_PROPHET_API_ERROR
: AutomatedReportResult::REASON_DEFAULT;
$this->failReport($reason);
$logger->error(self::LOG_PREFIX . ' Error', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult?->getUuid(),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
if ($this->attempts() < $this->tries) {
$logger->info(self::LOG_PREFIX . ' Retry scheduled', [
'attempts' => $this->attempts(),
]);
$this->release(30);
} else {
$this->fail($exception);
}
}
}
private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool
{
if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {
$logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [
'automatedReportUuid' => $this->reportUuid,
'type' => $automatedReport->getType(),
]);
return false;
}
if (! $automatedReport->getStatus()) {
$logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {
$logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
return true;
}
private function failReport(int $reason): void
{
$this->reportResult?->update([
'status' => AutomatedReportResult::STATUS_FAILED,
'reason' => $reason,
]);
}
private function dispatchNotGeneratedNotifications(
AutomatedReport $automatedReport,
AutomatedReportsService $reportService,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
LoggerInterface $logger,
): void {
if ($this->reportResult === null) {
return;
}
$recipients = $reportService->getValidRecipientUsers($automatedReport);
if (empty($recipients)) {
$logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$reportName = $automatedReport->getCustomName()
?: $reportService->getReportTypeName($this->reportResult);
$periodName = $reportService->getReportPeriodName($this->reportResult);
$reportsPageUrl = $urlGenerator->route('ai.reports.show');
foreach ($recipients as $recipient) {
$jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(
reportUuid: $this->reportResult->getUuid(),
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
reportName: $reportName,
periodName: $periodName,
reportsPageUrl: $reportsPageUrl,
));
}
$logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [
'automatedReportUuid' => $this->reportUuid,
'recipientsCount' => count($recipients),
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Mail\Reports;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Jiminny\Mail\Mailable;
class ReportNotGenerated extends Mailable implements ShouldQueue
{
use Queueable;
use SerializesModels;
public function __construct(
private readonly string $reportName,
private readonly string $periodName,
private readonly string $reportsPageUrl,
private readonly string $mailSubject,
) {
}
public function build(): Mailable
{
$logoCDN = config('logos.cdn.header');
$fullLogoCDN = config('logos.cdn.footer');
$fromAddress = config('mail.from.address');
if (config('jiminny.deploy_region') === 'eu') {
$fromAddress = '[EMAIL]';
}
return $this
->from($fromAddress, config('mail.from.name'))
->view('emails.reports.report-not-generated', [
'reportName' => $this->reportName,
'periodName' => $this->periodName,
'reportsPageUrl' => $this->reportsPageUrl,
'isReport' => true,
'headerLogoCdn' => $logoCDN,
'footerLogoCdn' => $fullLogoCDN,
])
->subject($this->mailSubject);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
64477
|
|
64493
|
1428
|
10
|
2026-04-21T11:18:34.123889+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776770314123_m2.jpg...
|
PhpStorm
|
faVsco.js – ReportNotGenerated.php
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\AutomatedReports;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
use Throwable;
class RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use Queueable;
private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';
private const int MIN_ACTIVITIES_COUNT = 1;
public int $tries = 2;
private ?AutomatedReportResult $reportResult = null;
public function __construct(private readonly string $reportUuid)
{
$this->onQueue(Constants::QUEUE_ANALYTICS);
}
public function uniqueId(): string
{
return $this->reportUuid;
}
public function handle(
AutomatedReportsService $reportService,
AskJiminnyReportActivityService $activityService,
ProphetClient $prophetClient,
LoggerInterface $logger,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
): void {
$logger->info(self::LOG_PREFIX . ' Started', [
'automatedReportUuid' => $this->reportUuid,
]);
try {
$automatedReport = $reportService->getReport($this->reportUuid);
if (! $this->validateReport($automatedReport, $logger)) {
return;
}
$creator = $automatedReport->getCreator();
if ($creator === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$savedSearch = $automatedReport->getSavedSearch();
if ($savedSearch === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$prompt = $automatedReport->getAskAnythingPrompt();
if ($prompt === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$this->reportResult = $reportService->getOrCreateReportResult(
automatedReport: $automatedReport,
data: [
'status' => AutomatedReportResult::STATUS_DEFAULT,
'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,
]
);
$activityIds = $activityService->getActivityIdsForSavedSearch(
savedSearch: $savedSearch,
user: $creator,
frequency: $automatedReport->getFrequency(),
);
$logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {
$this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);
$logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
$this->dispatchNotGeneratedNotifications(
$automatedReport,
$reportService,
$urlGenerator,
$jobDispatcher,
$logger,
);
return;
}
$payload = $reportService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $this->reportResult,
activityIds: $activityIds,
);
$this->reportResult->update([
'name' => $reportService->getReportFileName($this->reportResult),
'payload' => $payload,
'status' => AutomatedReportResult::STATUS_REQUESTED,
'requested_at' => Carbon::now()->toDateTimeString(),
]);
$logger->info(self::LOG_PREFIX . ' Request sent', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult->getUuid(),
'payload' => $payload,
]);
$response = $prophetClient->sendRequest(
endpoint: ProphetClient::ASK_JIMINNY_REPORT,
requestArray: $payload,
);
$logger->info(self::LOG_PREFIX . ' Response received', [
'response' => $response->getContent(),
]);
} catch (Throwable $exception) {
$reason = $exception instanceof ProphetException
? AutomatedReportResult::REASON_PROPHET_API_ERROR
: AutomatedReportResult::REASON_DEFAULT;
$this->failReport($reason);
$logger->error(self::LOG_PREFIX . ' Error', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult?->getUuid(),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
if ($this->attempts() < $this->tries) {
$logger->info(self::LOG_PREFIX . ' Retry scheduled', [
'attempts' => $this->attempts(),
]);
$this->release(30);
} else {
$this->fail($exception);
}
}
}
private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool
{
if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {
$logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [
'automatedReportUuid' => $this->reportUuid,
'type' => $automatedReport->getType(),
]);
return false;
}
if (! $automatedReport->getStatus()) {
$logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {
$logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
return true;
}
private function failReport(int $reason): void
{
$this->reportResult?->update([
'status' => AutomatedReportResult::STATUS_FAILED,
'reason' => $reason,
]);
}
private function dispatchNotGeneratedNotifications(
AutomatedReport $automatedReport,
AutomatedReportsService $reportService,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
LoggerInterface $logger,
): void {
if ($this->reportResult === null) {
return;
}
$recipients = $reportService->getValidRecipientUsers($automatedReport);
if (empty($recipients)) {
$logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$reportName = $automatedReport->getCustomName()
?: $reportService->getReportTypeName($this->reportResult);
$periodName = $reportService->getReportPeriodName($this->reportResult);
$reportsPageUrl = $urlGenerator->route('ai.reports.show');
foreach ($recipients as $recipient) {
$jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(
reportUuid: $this->reportResult->getUuid(),
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
reportName: $reportName,
periodName: $periodName,
reportsPageUrl: $reportsPageUrl,
));
}
$logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [
'automatedReportUuid' => $this->reportUuid,
'recipientsCount' => count($recipients),
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Mail\Reports;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Jiminny\Mail\Mailable;
class ReportNotGenerated extends Mailable implements ShouldQueue
{
use Queueable;
use SerializesModels;
public function __construct(
private readonly string $reportName,
private readonly string $periodName,
private readonly string $reportsPageUrl,
private readonly string $mailSubject,
) {
}
public function build(): Mailable
{
$logoCDN = config('logos.cdn.header');
$fullLogoCDN = config('logos.cdn.footer');
$fromAddress = config('mail.from.address');
if (config('jiminny.deploy_region') === 'eu') {
$fromAddress = '[EMAIL]';
}
return $this
->from($fromAddress, config('mail.from.name'))
->view('emails.reports.report-not-generated', [
'reportName' => $this->reportName,
'periodName' => $this->periodName,
'reportsPageUrl' => $this->reportsPageUrl,
'isReport' => true,
'headerLogoCdn' => $logoCDN,
'footerLogoCdn' => $fullLogoCDN,
])
->subject($this->mailSubject);
}
}
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},"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.12732713,"height":0.025538707},"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"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},"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},"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},"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},"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},"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},"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},"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},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\AutomatedReports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\ProphetAi\\Exceptions\\ProphetException;\nuse Jiminny\\Component\\ProphetAi\\ProphetClient;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\nuse Throwable;\n\nclass RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use Queueable;\n\n private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';\n\n private const int MIN_ACTIVITIES_COUNT = 1;\n\n public int $tries = 2;\n\n private ?AutomatedReportResult $reportResult = null;\n\n public function __construct(private readonly string $reportUuid)\n {\n $this->onQueue(Constants::QUEUE_ANALYTICS);\n }\n\n public function uniqueId(): string\n {\n return $this->reportUuid;\n }\n\n public function handle(\n AutomatedReportsService $reportService,\n AskJiminnyReportActivityService $activityService,\n ProphetClient $prophetClient,\n LoggerInterface $logger,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n ): void {\n $logger->info(self::LOG_PREFIX . ' Started', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n try {\n $automatedReport = $reportService->getReport($this->reportUuid);\n\n if (! $this->validateReport($automatedReport, $logger)) {\n return;\n }\n\n $creator = $automatedReport->getCreator();\n if ($creator === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $savedSearch = $automatedReport->getSavedSearch();\n if ($savedSearch === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $prompt = $automatedReport->getAskAnythingPrompt();\n if ($prompt === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $this->reportResult = $reportService->getOrCreateReportResult(\n automatedReport: $automatedReport,\n data: [\n 'status' => AutomatedReportResult::STATUS_DEFAULT,\n 'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,\n ]\n );\n\n $activityIds = $activityService->getActivityIdsForSavedSearch(\n savedSearch: $savedSearch,\n user: $creator,\n frequency: $automatedReport->getFrequency(),\n );\n\n $logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {\n $this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);\n\n $logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n $this->dispatchNotGeneratedNotifications(\n $automatedReport,\n $reportService,\n $urlGenerator,\n $jobDispatcher,\n $logger,\n );\n\n return;\n }\n\n $payload = $reportService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $this->reportResult,\n activityIds: $activityIds,\n );\n\n $this->reportResult->update([\n 'name' => $reportService->getReportFileName($this->reportResult),\n 'payload' => $payload,\n 'status' => AutomatedReportResult::STATUS_REQUESTED,\n 'requested_at' => Carbon::now()->toDateTimeString(),\n ]);\n\n $logger->info(self::LOG_PREFIX . ' Request sent', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult->getUuid(),\n 'payload' => $payload,\n ]);\n\n $response = $prophetClient->sendRequest(\n endpoint: ProphetClient::ASK_JIMINNY_REPORT,\n requestArray: $payload,\n );\n\n $logger->info(self::LOG_PREFIX . ' Response received', [\n 'response' => $response->getContent(),\n ]);\n } catch (Throwable $exception) {\n $reason = $exception instanceof ProphetException\n ? AutomatedReportResult::REASON_PROPHET_API_ERROR\n : AutomatedReportResult::REASON_DEFAULT;\n\n $this->failReport($reason);\n\n $logger->error(self::LOG_PREFIX . ' Error', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult?->getUuid(),\n 'code' => $exception->getCode(),\n 'message' => $exception->getMessage(),\n ]);\n\n if ($this->attempts() < $this->tries) {\n $logger->info(self::LOG_PREFIX . ' Retry scheduled', [\n 'attempts' => $this->attempts(),\n ]);\n\n $this->release(30);\n } else {\n $this->fail($exception);\n }\n }\n }\n\n private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool\n {\n if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [\n 'automatedReportUuid' => $this->reportUuid,\n 'type' => $automatedReport->getType(),\n ]);\n\n return false;\n }\n\n if (! $automatedReport->getStatus()) {\n $logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {\n $logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n return true;\n }\n\n private function failReport(int $reason): void\n {\n $this->reportResult?->update([\n 'status' => AutomatedReportResult::STATUS_FAILED,\n 'reason' => $reason,\n ]);\n }\n\n private function dispatchNotGeneratedNotifications(\n AutomatedReport $automatedReport,\n AutomatedReportsService $reportService,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n LoggerInterface $logger,\n ): void {\n if ($this->reportResult === null) {\n return;\n }\n\n $recipients = $reportService->getValidRecipientUsers($automatedReport);\n if (empty($recipients)) {\n $logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $reportName = $automatedReport->getCustomName()\n ?: $reportService->getReportTypeName($this->reportResult);\n $periodName = $reportService->getReportPeriodName($this->reportResult);\n $reportsPageUrl = $urlGenerator->route('ai.reports.show');\n\n foreach ($recipients as $recipient) {\n $jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(\n reportUuid: $this->reportResult->getUuid(),\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n reportName: $reportName,\n periodName: $periodName,\n reportsPageUrl: $reportsPageUrl,\n ));\n }\n\n $logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [\n 'automatedReportUuid' => $this->reportUuid,\n 'recipientsCount' => count($recipients),\n ]);\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\AutomatedReports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\ProphetAi\\Exceptions\\ProphetException;\nuse Jiminny\\Component\\ProphetAi\\ProphetClient;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\nuse Throwable;\n\nclass RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use Queueable;\n\n private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';\n\n private const int MIN_ACTIVITIES_COUNT = 1;\n\n public int $tries = 2;\n\n private ?AutomatedReportResult $reportResult = null;\n\n public function __construct(private readonly string $reportUuid)\n {\n $this->onQueue(Constants::QUEUE_ANALYTICS);\n }\n\n public function uniqueId(): string\n {\n return $this->reportUuid;\n }\n\n public function handle(\n AutomatedReportsService $reportService,\n AskJiminnyReportActivityService $activityService,\n ProphetClient $prophetClient,\n LoggerInterface $logger,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n ): void {\n $logger->info(self::LOG_PREFIX . ' Started', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n try {\n $automatedReport = $reportService->getReport($this->reportUuid);\n\n if (! $this->validateReport($automatedReport, $logger)) {\n return;\n }\n\n $creator = $automatedReport->getCreator();\n if ($creator === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $savedSearch = $automatedReport->getSavedSearch();\n if ($savedSearch === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $prompt = $automatedReport->getAskAnythingPrompt();\n if ($prompt === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $this->reportResult = $reportService->getOrCreateReportResult(\n automatedReport: $automatedReport,\n data: [\n 'status' => AutomatedReportResult::STATUS_DEFAULT,\n 'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,\n ]\n );\n\n $activityIds = $activityService->getActivityIdsForSavedSearch(\n savedSearch: $savedSearch,\n user: $creator,\n frequency: $automatedReport->getFrequency(),\n );\n\n $logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {\n $this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);\n\n $logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n $this->dispatchNotGeneratedNotifications(\n $automatedReport,\n $reportService,\n $urlGenerator,\n $jobDispatcher,\n $logger,\n );\n\n return;\n }\n\n $payload = $reportService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $this->reportResult,\n activityIds: $activityIds,\n );\n\n $this->reportResult->update([\n 'name' => $reportService->getReportFileName($this->reportResult),\n 'payload' => $payload,\n 'status' => AutomatedReportResult::STATUS_REQUESTED,\n 'requested_at' => Carbon::now()->toDateTimeString(),\n ]);\n\n $logger->info(self::LOG_PREFIX . ' Request sent', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult->getUuid(),\n 'payload' => $payload,\n ]);\n\n $response = $prophetClient->sendRequest(\n endpoint: ProphetClient::ASK_JIMINNY_REPORT,\n requestArray: $payload,\n );\n\n $logger->info(self::LOG_PREFIX . ' Response received', [\n 'response' => $response->getContent(),\n ]);\n } catch (Throwable $exception) {\n $reason = $exception instanceof ProphetException\n ? AutomatedReportResult::REASON_PROPHET_API_ERROR\n : AutomatedReportResult::REASON_DEFAULT;\n\n $this->failReport($reason);\n\n $logger->error(self::LOG_PREFIX . ' Error', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult?->getUuid(),\n 'code' => $exception->getCode(),\n 'message' => $exception->getMessage(),\n ]);\n\n if ($this->attempts() < $this->tries) {\n $logger->info(self::LOG_PREFIX . ' Retry scheduled', [\n 'attempts' => $this->attempts(),\n ]);\n\n $this->release(30);\n } else {\n $this->fail($exception);\n }\n }\n }\n\n private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool\n {\n if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [\n 'automatedReportUuid' => $this->reportUuid,\n 'type' => $automatedReport->getType(),\n ]);\n\n return false;\n }\n\n if (! $automatedReport->getStatus()) {\n $logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {\n $logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n return true;\n }\n\n private function failReport(int $reason): void\n {\n $this->reportResult?->update([\n 'status' => AutomatedReportResult::STATUS_FAILED,\n 'reason' => $reason,\n ]);\n }\n\n private function dispatchNotGeneratedNotifications(\n AutomatedReport $automatedReport,\n AutomatedReportsService $reportService,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n LoggerInterface $logger,\n ): void {\n if ($this->reportResult === null) {\n return;\n }\n\n $recipients = $reportService->getValidRecipientUsers($automatedReport);\n if (empty($recipients)) {\n $logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $reportName = $automatedReport->getCustomName()\n ?: $reportService->getReportTypeName($this->reportResult);\n $periodName = $reportService->getReportPeriodName($this->reportResult);\n $reportsPageUrl = $urlGenerator->route('ai.reports.show');\n\n foreach ($recipients as $recipient) {\n $jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(\n reportUuid: $this->reportResult->getUuid(),\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n reportName: $reportName,\n periodName: $periodName,\n reportsPageUrl: $reportsPageUrl,\n ));\n }\n\n $logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [\n 'automatedReportUuid' => $this->reportUuid,\n 'recipientsCount' => count($recipients),\n ]);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"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},"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},"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},"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\\Mail\\Reports;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Jiminny\\Mail\\Mailable;\n\nclass ReportNotGenerated extends Mailable implements ShouldQueue\n{\n use Queueable;\n use SerializesModels;\n\n public function __construct(\n private readonly string $reportName,\n private readonly string $periodName,\n private readonly string $reportsPageUrl,\n private readonly string $mailSubject,\n ) {\n }\n\n public function build(): Mailable\n {\n $logoCDN = config('logos.cdn.header');\n $fullLogoCDN = config('logos.cdn.footer');\n\n $fromAddress = config('mail.from.address');\n if (config('jiminny.deploy_region') === 'eu') {\n $fromAddress = 'no-reply@jiminny.com';\n }\n\n return $this\n ->from($fromAddress, config('mail.from.name'))\n ->view('emails.reports.report-not-generated', [\n 'reportName' => $this->reportName,\n 'periodName' => $this->periodName,\n 'reportsPageUrl' => $this->reportsPageUrl,\n 'isReport' => true,\n 'headerLogoCdn' => $logoCDN,\n 'footerLogoCdn' => $fullLogoCDN,\n ])\n ->subject($this->mailSubject);\n }\n}","depth":4,"bounds":{"left":0.40425533,"top":0.12210695,"width":0.2862367,"height":0.87789303},"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Mail\\Reports;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Jiminny\\Mail\\Mailable;\n\nclass ReportNotGenerated extends Mailable implements ShouldQueue\n{\n use Queueable;\n use SerializesModels;\n\n public function __construct(\n private readonly string $reportName,\n private readonly string $periodName,\n private readonly string $reportsPageUrl,\n private readonly string $mailSubject,\n ) {\n }\n\n public function build(): Mailable\n {\n $logoCDN = config('logos.cdn.header');\n $fullLogoCDN = config('logos.cdn.footer');\n\n $fromAddress = config('mail.from.address');\n if (config('jiminny.deploy_region') === 'eu') {\n $fromAddress = 'no-reply@jiminny.com';\n }\n\n return $this\n ->from($fromAddress, config('mail.from.name'))\n ->view('emails.reports.report-not-generated', [\n 'reportName' => $this->reportName,\n 'periodName' => $this->periodName,\n 'reportsPageUrl' => $this->reportsPageUrl,\n 'isReport' => true,\n 'headerLogoCdn' => $logoCDN,\n 'footerLogoCdn' => $fullLogoCDN,\n ])\n ->subject($this->mailSubject);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"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},"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},"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},"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},"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},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8828084800201052505
|
-787814697458742428
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\AutomatedReports;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
use Throwable;
class RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use Queueable;
private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';
private const int MIN_ACTIVITIES_COUNT = 1;
public int $tries = 2;
private ?AutomatedReportResult $reportResult = null;
public function __construct(private readonly string $reportUuid)
{
$this->onQueue(Constants::QUEUE_ANALYTICS);
}
public function uniqueId(): string
{
return $this->reportUuid;
}
public function handle(
AutomatedReportsService $reportService,
AskJiminnyReportActivityService $activityService,
ProphetClient $prophetClient,
LoggerInterface $logger,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
): void {
$logger->info(self::LOG_PREFIX . ' Started', [
'automatedReportUuid' => $this->reportUuid,
]);
try {
$automatedReport = $reportService->getReport($this->reportUuid);
if (! $this->validateReport($automatedReport, $logger)) {
return;
}
$creator = $automatedReport->getCreator();
if ($creator === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$savedSearch = $automatedReport->getSavedSearch();
if ($savedSearch === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$prompt = $automatedReport->getAskAnythingPrompt();
if ($prompt === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$this->reportResult = $reportService->getOrCreateReportResult(
automatedReport: $automatedReport,
data: [
'status' => AutomatedReportResult::STATUS_DEFAULT,
'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,
]
);
$activityIds = $activityService->getActivityIdsForSavedSearch(
savedSearch: $savedSearch,
user: $creator,
frequency: $automatedReport->getFrequency(),
);
$logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {
$this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);
$logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
$this->dispatchNotGeneratedNotifications(
$automatedReport,
$reportService,
$urlGenerator,
$jobDispatcher,
$logger,
);
return;
}
$payload = $reportService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $this->reportResult,
activityIds: $activityIds,
);
$this->reportResult->update([
'name' => $reportService->getReportFileName($this->reportResult),
'payload' => $payload,
'status' => AutomatedReportResult::STATUS_REQUESTED,
'requested_at' => Carbon::now()->toDateTimeString(),
]);
$logger->info(self::LOG_PREFIX . ' Request sent', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult->getUuid(),
'payload' => $payload,
]);
$response = $prophetClient->sendRequest(
endpoint: ProphetClient::ASK_JIMINNY_REPORT,
requestArray: $payload,
);
$logger->info(self::LOG_PREFIX . ' Response received', [
'response' => $response->getContent(),
]);
} catch (Throwable $exception) {
$reason = $exception instanceof ProphetException
? AutomatedReportResult::REASON_PROPHET_API_ERROR
: AutomatedReportResult::REASON_DEFAULT;
$this->failReport($reason);
$logger->error(self::LOG_PREFIX . ' Error', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult?->getUuid(),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
if ($this->attempts() < $this->tries) {
$logger->info(self::LOG_PREFIX . ' Retry scheduled', [
'attempts' => $this->attempts(),
]);
$this->release(30);
} else {
$this->fail($exception);
}
}
}
private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool
{
if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {
$logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [
'automatedReportUuid' => $this->reportUuid,
'type' => $automatedReport->getType(),
]);
return false;
}
if (! $automatedReport->getStatus()) {
$logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {
$logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
return true;
}
private function failReport(int $reason): void
{
$this->reportResult?->update([
'status' => AutomatedReportResult::STATUS_FAILED,
'reason' => $reason,
]);
}
private function dispatchNotGeneratedNotifications(
AutomatedReport $automatedReport,
AutomatedReportsService $reportService,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
LoggerInterface $logger,
): void {
if ($this->reportResult === null) {
return;
}
$recipients = $reportService->getValidRecipientUsers($automatedReport);
if (empty($recipients)) {
$logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$reportName = $automatedReport->getCustomName()
?: $reportService->getReportTypeName($this->reportResult);
$periodName = $reportService->getReportPeriodName($this->reportResult);
$reportsPageUrl = $urlGenerator->route('ai.reports.show');
foreach ($recipients as $recipient) {
$jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(
reportUuid: $this->reportResult->getUuid(),
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
reportName: $reportName,
periodName: $periodName,
reportsPageUrl: $reportsPageUrl,
));
}
$logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [
'automatedReportUuid' => $this->reportUuid,
'recipientsCount' => count($recipients),
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Mail\Reports;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Jiminny\Mail\Mailable;
class ReportNotGenerated extends Mailable implements ShouldQueue
{
use Queueable;
use SerializesModels;
public function __construct(
private readonly string $reportName,
private readonly string $periodName,
private readonly string $reportsPageUrl,
private readonly string $mailSubject,
) {
}
public function build(): Mailable
{
$logoCDN = config('logos.cdn.header');
$fullLogoCDN = config('logos.cdn.footer');
$fromAddress = config('mail.from.address');
if (config('jiminny.deploy_region') === 'eu') {
$fromAddress = '[EMAIL]';
}
return $this
->from($fromAddress, config('mail.from.name'))
->view('emails.reports.report-not-generated', [
'reportName' => $this->reportName,
'periodName' => $this->periodName,
'reportsPageUrl' => $this->reportsPageUrl,
'isReport' => true,
'headerLogoCdn' => $logoCDN,
'footerLogoCdn' => $fullLogoCDN,
])
->subject($this->mailSubject);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
|
64494
|
1427
|
10
|
2026-04-21T11:18:34.155594+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776770314155_m1.jpg...
|
PhpStorm
|
faVsco.js – ReportNotGenerated.php
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\AutomatedReports;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
use Throwable;
class RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use Queueable;
private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';
private const int MIN_ACTIVITIES_COUNT = 1;
public int $tries = 2;
private ?AutomatedReportResult $reportResult = null;
public function __construct(private readonly string $reportUuid)
{
$this->onQueue(Constants::QUEUE_ANALYTICS);
}
public function uniqueId(): string
{
return $this->reportUuid;
}
public function handle(
AutomatedReportsService $reportService,
AskJiminnyReportActivityService $activityService,
ProphetClient $prophetClient,
LoggerInterface $logger,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
): void {
$logger->info(self::LOG_PREFIX . ' Started', [
'automatedReportUuid' => $this->reportUuid,
]);
try {
$automatedReport = $reportService->getReport($this->reportUuid);
if (! $this->validateReport($automatedReport, $logger)) {
return;
}
$creator = $automatedReport->getCreator();
if ($creator === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$savedSearch = $automatedReport->getSavedSearch();
if ($savedSearch === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$prompt = $automatedReport->getAskAnythingPrompt();
if ($prompt === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$this->reportResult = $reportService->getOrCreateReportResult(
automatedReport: $automatedReport,
data: [
'status' => AutomatedReportResult::STATUS_DEFAULT,
'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,
]
);
$activityIds = $activityService->getActivityIdsForSavedSearch(
savedSearch: $savedSearch,
user: $creator,
frequency: $automatedReport->getFrequency(),
);
$logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {
$this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);
$logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
$this->dispatchNotGeneratedNotifications(
$automatedReport,
$reportService,
$urlGenerator,
$jobDispatcher,
$logger,
);
return;
}
$payload = $reportService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $this->reportResult,
activityIds: $activityIds,
);
$this->reportResult->update([
'name' => $reportService->getReportFileName($this->reportResult),
'payload' => $payload,
'status' => AutomatedReportResult::STATUS_REQUESTED,
'requested_at' => Carbon::now()->toDateTimeString(),
]);
$logger->info(self::LOG_PREFIX . ' Request sent', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult->getUuid(),
'payload' => $payload,
]);
$response = $prophetClient->sendRequest(
endpoint: ProphetClient::ASK_JIMINNY_REPORT,
requestArray: $payload,
);
$logger->info(self::LOG_PREFIX . ' Response received', [
'response' => $response->getContent(),
]);
} catch (Throwable $exception) {
$reason = $exception instanceof ProphetException
? AutomatedReportResult::REASON_PROPHET_API_ERROR
: AutomatedReportResult::REASON_DEFAULT;
$this->failReport($reason);
$logger->error(self::LOG_PREFIX . ' Error', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult?->getUuid(),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
if ($this->attempts() < $this->tries) {
$logger->info(self::LOG_PREFIX . ' Retry scheduled', [
'attempts' => $this->attempts(),
]);
$this->release(30);
} else {
$this->fail($exception);
}
}
}
private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool
{
if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {
$logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [
'automatedReportUuid' => $this->reportUuid,
'type' => $automatedReport->getType(),
]);
return false;
}
if (! $automatedReport->getStatus()) {
$logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {
$logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
return true;
}
private function failReport(int $reason): void
{
$this->reportResult?->update([
'status' => AutomatedReportResult::STATUS_FAILED,
'reason' => $reason,
]);
}
private function dispatchNotGeneratedNotifications(
AutomatedReport $automatedReport,
AutomatedReportsService $reportService,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
LoggerInterface $logger,
): void {
if ($this->reportResult === null) {
return;
}
$recipients = $reportService->getValidRecipientUsers($automatedReport);
if (empty($recipients)) {
$logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$reportName = $automatedReport->getCustomName()
?: $reportService->getReportTypeName($this->reportResult);
$periodName = $reportService->getReportPeriodName($this->reportResult);
$reportsPageUrl = $urlGenerator->route('ai.reports.show');
foreach ($recipients as $recipient) {
$jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(
reportUuid: $this->reportResult->getUuid(),
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
reportName: $reportName,
periodName: $periodName,
reportsPageUrl: $reportsPageUrl,
));
}
$logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [
'automatedReportUuid' => $this->reportUuid,
'recipientsCount' => count($recipients),
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Mail\Reports;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Jiminny\Mail\Mailable;
class ReportNotGenerated extends Mailable implements ShouldQueue
{
use Queueable;
use SerializesModels;
public function __construct(
private readonly string $reportName,
private readonly string $periodName,
private readonly string $reportsPageUrl,
private readonly string $mailSubject,
) {
}
public function build(): Mailable
{
$logoCDN = config('logos.cdn.header');
$fullLogoCDN = config('logos.cdn.footer');
$fromAddress = config('mail.from.address');
if (config('jiminny.deploy_region') === 'eu') {
$fromAddress = '[EMAIL]';
}
return $this
->from($fromAddress, config('mail.from.name'))
->view('emails.reports.report-not-generated', [
'reportName' => $this->reportName,
'periodName' => $this->periodName,
'reportsPageUrl' => $this->reportsPageUrl,
'isReport' => true,
'headerLogoCdn' => $logoCDN,
'footerLogoCdn' => $fullLogoCDN,
])
->subject($this->mailSubject);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"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},"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},"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},"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},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\AutomatedReports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\ProphetAi\\Exceptions\\ProphetException;\nuse Jiminny\\Component\\ProphetAi\\ProphetClient;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\nuse Throwable;\n\nclass RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use Queueable;\n\n private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';\n\n private const int MIN_ACTIVITIES_COUNT = 1;\n\n public int $tries = 2;\n\n private ?AutomatedReportResult $reportResult = null;\n\n public function __construct(private readonly string $reportUuid)\n {\n $this->onQueue(Constants::QUEUE_ANALYTICS);\n }\n\n public function uniqueId(): string\n {\n return $this->reportUuid;\n }\n\n public function handle(\n AutomatedReportsService $reportService,\n AskJiminnyReportActivityService $activityService,\n ProphetClient $prophetClient,\n LoggerInterface $logger,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n ): void {\n $logger->info(self::LOG_PREFIX . ' Started', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n try {\n $automatedReport = $reportService->getReport($this->reportUuid);\n\n if (! $this->validateReport($automatedReport, $logger)) {\n return;\n }\n\n $creator = $automatedReport->getCreator();\n if ($creator === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $savedSearch = $automatedReport->getSavedSearch();\n if ($savedSearch === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $prompt = $automatedReport->getAskAnythingPrompt();\n if ($prompt === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $this->reportResult = $reportService->getOrCreateReportResult(\n automatedReport: $automatedReport,\n data: [\n 'status' => AutomatedReportResult::STATUS_DEFAULT,\n 'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,\n ]\n );\n\n $activityIds = $activityService->getActivityIdsForSavedSearch(\n savedSearch: $savedSearch,\n user: $creator,\n frequency: $automatedReport->getFrequency(),\n );\n\n $logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {\n $this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);\n\n $logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n $this->dispatchNotGeneratedNotifications(\n $automatedReport,\n $reportService,\n $urlGenerator,\n $jobDispatcher,\n $logger,\n );\n\n return;\n }\n\n $payload = $reportService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $this->reportResult,\n activityIds: $activityIds,\n );\n\n $this->reportResult->update([\n 'name' => $reportService->getReportFileName($this->reportResult),\n 'payload' => $payload,\n 'status' => AutomatedReportResult::STATUS_REQUESTED,\n 'requested_at' => Carbon::now()->toDateTimeString(),\n ]);\n\n $logger->info(self::LOG_PREFIX . ' Request sent', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult->getUuid(),\n 'payload' => $payload,\n ]);\n\n $response = $prophetClient->sendRequest(\n endpoint: ProphetClient::ASK_JIMINNY_REPORT,\n requestArray: $payload,\n );\n\n $logger->info(self::LOG_PREFIX . ' Response received', [\n 'response' => $response->getContent(),\n ]);\n } catch (Throwable $exception) {\n $reason = $exception instanceof ProphetException\n ? AutomatedReportResult::REASON_PROPHET_API_ERROR\n : AutomatedReportResult::REASON_DEFAULT;\n\n $this->failReport($reason);\n\n $logger->error(self::LOG_PREFIX . ' Error', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult?->getUuid(),\n 'code' => $exception->getCode(),\n 'message' => $exception->getMessage(),\n ]);\n\n if ($this->attempts() < $this->tries) {\n $logger->info(self::LOG_PREFIX . ' Retry scheduled', [\n 'attempts' => $this->attempts(),\n ]);\n\n $this->release(30);\n } else {\n $this->fail($exception);\n }\n }\n }\n\n private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool\n {\n if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [\n 'automatedReportUuid' => $this->reportUuid,\n 'type' => $automatedReport->getType(),\n ]);\n\n return false;\n }\n\n if (! $automatedReport->getStatus()) {\n $logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {\n $logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n return true;\n }\n\n private function failReport(int $reason): void\n {\n $this->reportResult?->update([\n 'status' => AutomatedReportResult::STATUS_FAILED,\n 'reason' => $reason,\n ]);\n }\n\n private function dispatchNotGeneratedNotifications(\n AutomatedReport $automatedReport,\n AutomatedReportsService $reportService,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n LoggerInterface $logger,\n ): void {\n if ($this->reportResult === null) {\n return;\n }\n\n $recipients = $reportService->getValidRecipientUsers($automatedReport);\n if (empty($recipients)) {\n $logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $reportName = $automatedReport->getCustomName()\n ?: $reportService->getReportTypeName($this->reportResult);\n $periodName = $reportService->getReportPeriodName($this->reportResult);\n $reportsPageUrl = $urlGenerator->route('ai.reports.show');\n\n foreach ($recipients as $recipient) {\n $jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(\n reportUuid: $this->reportResult->getUuid(),\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n reportName: $reportName,\n periodName: $periodName,\n reportsPageUrl: $reportsPageUrl,\n ));\n }\n\n $logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [\n 'automatedReportUuid' => $this->reportUuid,\n 'recipientsCount' => count($recipients),\n ]);\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Jobs\\AutomatedReports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\ProphetAi\\Exceptions\\ProphetException;\nuse Jiminny\\Component\\ProphetAi\\ProphetClient;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\nuse Throwable;\n\nclass RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique\n{\n use InteractsWithQueue;\n use Queueable;\n\n private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';\n\n private const int MIN_ACTIVITIES_COUNT = 1;\n\n public int $tries = 2;\n\n private ?AutomatedReportResult $reportResult = null;\n\n public function __construct(private readonly string $reportUuid)\n {\n $this->onQueue(Constants::QUEUE_ANALYTICS);\n }\n\n public function uniqueId(): string\n {\n return $this->reportUuid;\n }\n\n public function handle(\n AutomatedReportsService $reportService,\n AskJiminnyReportActivityService $activityService,\n ProphetClient $prophetClient,\n LoggerInterface $logger,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n ): void {\n $logger->info(self::LOG_PREFIX . ' Started', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n try {\n $automatedReport = $reportService->getReport($this->reportUuid);\n\n if (! $this->validateReport($automatedReport, $logger)) {\n return;\n }\n\n $creator = $automatedReport->getCreator();\n if ($creator === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $savedSearch = $automatedReport->getSavedSearch();\n if ($savedSearch === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $prompt = $automatedReport->getAskAnythingPrompt();\n if ($prompt === null) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $this->reportResult = $reportService->getOrCreateReportResult(\n automatedReport: $automatedReport,\n data: [\n 'status' => AutomatedReportResult::STATUS_DEFAULT,\n 'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,\n ]\n );\n\n $activityIds = $activityService->getActivityIdsForSavedSearch(\n savedSearch: $savedSearch,\n user: $creator,\n frequency: $automatedReport->getFrequency(),\n );\n\n $logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {\n $this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);\n\n $logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [\n 'automatedReportUuid' => $this->reportUuid,\n 'activityCount' => count($activityIds),\n ]);\n\n $this->dispatchNotGeneratedNotifications(\n $automatedReport,\n $reportService,\n $urlGenerator,\n $jobDispatcher,\n $logger,\n );\n\n return;\n }\n\n $payload = $reportService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $this->reportResult,\n activityIds: $activityIds,\n );\n\n $this->reportResult->update([\n 'name' => $reportService->getReportFileName($this->reportResult),\n 'payload' => $payload,\n 'status' => AutomatedReportResult::STATUS_REQUESTED,\n 'requested_at' => Carbon::now()->toDateTimeString(),\n ]);\n\n $logger->info(self::LOG_PREFIX . ' Request sent', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult->getUuid(),\n 'payload' => $payload,\n ]);\n\n $response = $prophetClient->sendRequest(\n endpoint: ProphetClient::ASK_JIMINNY_REPORT,\n requestArray: $payload,\n );\n\n $logger->info(self::LOG_PREFIX . ' Response received', [\n 'response' => $response->getContent(),\n ]);\n } catch (Throwable $exception) {\n $reason = $exception instanceof ProphetException\n ? AutomatedReportResult::REASON_PROPHET_API_ERROR\n : AutomatedReportResult::REASON_DEFAULT;\n\n $this->failReport($reason);\n\n $logger->error(self::LOG_PREFIX . ' Error', [\n 'automatedReportUuid' => $this->reportUuid,\n 'reportUuid' => $this->reportResult?->getUuid(),\n 'code' => $exception->getCode(),\n 'message' => $exception->getMessage(),\n ]);\n\n if ($this->attempts() < $this->tries) {\n $logger->info(self::LOG_PREFIX . ' Retry scheduled', [\n 'attempts' => $this->attempts(),\n ]);\n\n $this->release(30);\n } else {\n $this->fail($exception);\n }\n }\n }\n\n private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool\n {\n if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {\n $logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [\n 'automatedReportUuid' => $this->reportUuid,\n 'type' => $automatedReport->getType(),\n ]);\n\n return false;\n }\n\n if (! $automatedReport->getStatus()) {\n $logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {\n $logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return false;\n }\n\n return true;\n }\n\n private function failReport(int $reason): void\n {\n $this->reportResult?->update([\n 'status' => AutomatedReportResult::STATUS_FAILED,\n 'reason' => $reason,\n ]);\n }\n\n private function dispatchNotGeneratedNotifications(\n AutomatedReport $automatedReport,\n AutomatedReportsService $reportService,\n UrlGenerator $urlGenerator,\n JobDispatcherInterface $jobDispatcher,\n LoggerInterface $logger,\n ): void {\n if ($this->reportResult === null) {\n return;\n }\n\n $recipients = $reportService->getValidRecipientUsers($automatedReport);\n if (empty($recipients)) {\n $logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [\n 'automatedReportUuid' => $this->reportUuid,\n ]);\n\n return;\n }\n\n $reportName = $automatedReport->getCustomName()\n ?: $reportService->getReportTypeName($this->reportResult);\n $periodName = $reportService->getReportPeriodName($this->reportResult);\n $reportsPageUrl = $urlGenerator->route('ai.reports.show');\n\n foreach ($recipients as $recipient) {\n $jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(\n reportUuid: $this->reportResult->getUuid(),\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n reportName: $reportName,\n periodName: $periodName,\n reportsPageUrl: $reportsPageUrl,\n ));\n }\n\n $logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [\n 'automatedReportUuid' => $this->reportUuid,\n 'recipientsCount' => count($recipients),\n ]);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"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},"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},"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},"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\\Mail\\Reports;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Jiminny\\Mail\\Mailable;\n\nclass ReportNotGenerated extends Mailable implements ShouldQueue\n{\n use Queueable;\n use SerializesModels;\n\n public function __construct(\n private readonly string $reportName,\n private readonly string $periodName,\n private readonly string $reportsPageUrl,\n private readonly string $mailSubject,\n ) {\n }\n\n public function build(): Mailable\n {\n $logoCDN = config('logos.cdn.header');\n $fullLogoCDN = config('logos.cdn.footer');\n\n $fromAddress = config('mail.from.address');\n if (config('jiminny.deploy_region') === 'eu') {\n $fromAddress = 'no-reply@jiminny.com';\n }\n\n return $this\n ->from($fromAddress, config('mail.from.name'))\n ->view('emails.reports.report-not-generated', [\n 'reportName' => $this->reportName,\n 'periodName' => $this->periodName,\n 'reportsPageUrl' => $this->reportsPageUrl,\n 'isReport' => true,\n 'headerLogoCdn' => $logoCDN,\n 'footerLogoCdn' => $fullLogoCDN,\n ])\n ->subject($this->mailSubject);\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Mail\\Reports;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Jiminny\\Mail\\Mailable;\n\nclass ReportNotGenerated extends Mailable implements ShouldQueue\n{\n use Queueable;\n use SerializesModels;\n\n public function __construct(\n private readonly string $reportName,\n private readonly string $periodName,\n private readonly string $reportsPageUrl,\n private readonly string $mailSubject,\n ) {\n }\n\n public function build(): Mailable\n {\n $logoCDN = config('logos.cdn.header');\n $fullLogoCDN = config('logos.cdn.footer');\n\n $fromAddress = config('mail.from.address');\n if (config('jiminny.deploy_region') === 'eu') {\n $fromAddress = 'no-reply@jiminny.com';\n }\n\n return $this\n ->from($fromAddress, config('mail.from.name'))\n ->view('emails.reports.report-not-generated', [\n 'reportName' => $this->reportName,\n 'periodName' => $this->periodName,\n 'reportsPageUrl' => $this->reportsPageUrl,\n 'isReport' => true,\n 'headerLogoCdn' => $logoCDN,\n 'footerLogoCdn' => $fullLogoCDN,\n ])\n ->subject($this->mailSubject);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"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},"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},"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},"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},"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},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8828084800201052505
|
-787814697458742428
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
declare(strict_types=1);
namespace Jiminny\Jobs\AutomatedReports;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\ProphetAi\Exceptions\ProphetException;
use Jiminny\Component\ProphetAi\ProphetClient;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
use Throwable;
class RequestGenerateAskJiminnyReportJob implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
use Queueable;
private const string LOG_PREFIX = '[AskJiminnyReport:Generate]';
private const int MIN_ACTIVITIES_COUNT = 1;
public int $tries = 2;
private ?AutomatedReportResult $reportResult = null;
public function __construct(private readonly string $reportUuid)
{
$this->onQueue(Constants::QUEUE_ANALYTICS);
}
public function uniqueId(): string
{
return $this->reportUuid;
}
public function handle(
AutomatedReportsService $reportService,
AskJiminnyReportActivityService $activityService,
ProphetClient $prophetClient,
LoggerInterface $logger,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
): void {
$logger->info(self::LOG_PREFIX . ' Started', [
'automatedReportUuid' => $this->reportUuid,
]);
try {
$automatedReport = $reportService->getReport($this->reportUuid);
if (! $this->validateReport($automatedReport, $logger)) {
return;
}
$creator = $automatedReport->getCreator();
if ($creator === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, report creator not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$savedSearch = $automatedReport->getSavedSearch();
if ($savedSearch === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, saved search not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$prompt = $automatedReport->getAskAnythingPrompt();
if ($prompt === null) {
$logger->warning(self::LOG_PREFIX . ' Skipped, ask anything prompt not found', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$this->reportResult = $reportService->getOrCreateReportResult(
automatedReport: $automatedReport,
data: [
'status' => AutomatedReportResult::STATUS_DEFAULT,
'media_type' => AutomatedReportsService::MEDIA_TYPE_PDF,
]
);
$activityIds = $activityService->getActivityIdsForSavedSearch(
savedSearch: $savedSearch,
user: $creator,
frequency: $automatedReport->getFrequency(),
);
$logger->info(self::LOG_PREFIX . ' Fetched activity IDs', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
if (count($activityIds) < self::MIN_ACTIVITIES_COUNT) {
$this->failReport(AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES);
$logger->info(self::LOG_PREFIX . ' Not enough activities, skipped', [
'automatedReportUuid' => $this->reportUuid,
'activityCount' => count($activityIds),
]);
$this->dispatchNotGeneratedNotifications(
$automatedReport,
$reportService,
$urlGenerator,
$jobDispatcher,
$logger,
);
return;
}
$payload = $reportService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $this->reportResult,
activityIds: $activityIds,
);
$this->reportResult->update([
'name' => $reportService->getReportFileName($this->reportResult),
'payload' => $payload,
'status' => AutomatedReportResult::STATUS_REQUESTED,
'requested_at' => Carbon::now()->toDateTimeString(),
]);
$logger->info(self::LOG_PREFIX . ' Request sent', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult->getUuid(),
'payload' => $payload,
]);
$response = $prophetClient->sendRequest(
endpoint: ProphetClient::ASK_JIMINNY_REPORT,
requestArray: $payload,
);
$logger->info(self::LOG_PREFIX . ' Response received', [
'response' => $response->getContent(),
]);
} catch (Throwable $exception) {
$reason = $exception instanceof ProphetException
? AutomatedReportResult::REASON_PROPHET_API_ERROR
: AutomatedReportResult::REASON_DEFAULT;
$this->failReport($reason);
$logger->error(self::LOG_PREFIX . ' Error', [
'automatedReportUuid' => $this->reportUuid,
'reportUuid' => $this->reportResult?->getUuid(),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
if ($this->attempts() < $this->tries) {
$logger->info(self::LOG_PREFIX . ' Retry scheduled', [
'attempts' => $this->attempts(),
]);
$this->release(30);
} else {
$this->fail($exception);
}
}
}
private function validateReport(AutomatedReport $automatedReport, LoggerInterface $logger): bool
{
if ($automatedReport->getType() !== AutomatedReportsService::TYPE_ASK_JIMINNY) {
$logger->warning(self::LOG_PREFIX . ' Skipped, not an ask_jiminny report', [
'automatedReportUuid' => $this->reportUuid,
'type' => $automatedReport->getType(),
]);
return false;
}
if (! $automatedReport->getStatus()) {
$logger->info(self::LOG_PREFIX . ' Skipped, report is not active', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
if ($automatedReport->getTeam()->getStatus() !== Team::STATUS_ACTIVE) {
$logger->info(self::LOG_PREFIX . ' Skipped, team is inactive', [
'automatedReportUuid' => $this->reportUuid,
]);
return false;
}
return true;
}
private function failReport(int $reason): void
{
$this->reportResult?->update([
'status' => AutomatedReportResult::STATUS_FAILED,
'reason' => $reason,
]);
}
private function dispatchNotGeneratedNotifications(
AutomatedReport $automatedReport,
AutomatedReportsService $reportService,
UrlGenerator $urlGenerator,
JobDispatcherInterface $jobDispatcher,
LoggerInterface $logger,
): void {
if ($this->reportResult === null) {
return;
}
$recipients = $reportService->getValidRecipientUsers($automatedReport);
if (empty($recipients)) {
$logger->info(self::LOG_PREFIX . ' No recipients to notify about missing report', [
'automatedReportUuid' => $this->reportUuid,
]);
return;
}
$reportName = $automatedReport->getCustomName()
?: $reportService->getReportTypeName($this->reportResult);
$periodName = $reportService->getReportPeriodName($this->reportResult);
$reportsPageUrl = $urlGenerator->route('ai.reports.show');
foreach ($recipients as $recipient) {
$jobDispatcher->dispatch(new SendReportNotGeneratedMailJob(
reportUuid: $this->reportResult->getUuid(),
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
reportName: $reportName,
periodName: $periodName,
reportsPageUrl: $reportsPageUrl,
));
}
$logger->info(self::LOG_PREFIX . ' Dispatched not-generated notifications', [
'automatedReportUuid' => $this->reportUuid,
'recipientsCount' => count($recipients),
]);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
declare(strict_types=1);
namespace Jiminny\Mail\Reports;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Jiminny\Mail\Mailable;
class ReportNotGenerated extends Mailable implements ShouldQueue
{
use Queueable;
use SerializesModels;
public function __construct(
private readonly string $reportName,
private readonly string $periodName,
private readonly string $reportsPageUrl,
private readonly string $mailSubject,
) {
}
public function build(): Mailable
{
$logoCDN = config('logos.cdn.header');
$fullLogoCDN = config('logos.cdn.footer');
$fromAddress = config('mail.from.address');
if (config('jiminny.deploy_region') === 'eu') {
$fromAddress = '[EMAIL]';
}
return $this
->from($fromAddress, config('mail.from.name'))
->view('emails.reports.report-not-generated', [
'reportName' => $this->reportName,
'periodName' => $this->periodName,
'reportsPageUrl' => $this->reportsPageUrl,
'isReport' => true,
'headerLogoCdn' => $logoCDN,
'footerLogoCdn' => $fullLogoCDN,
])
->subject($this->mailSubject);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
|
44286
|
935
|
67
|
2026-04-17T08:39:45.703483+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776415185703_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileViewWindowEditHistoryBookmarksProfiles→ FirefoxFileViewWindowEditHistoryBookmarksProfiles→ToolsHelpmeet.google.com/xpx-omah-rknNikolay Nikolov (Presenting, annotating)• 0.Support Daily • in 3 h 21 m100% 1978 • Fri 17 Apr 11:39:45+PhpStorm -Fle$ Debug-opportunityWindowDebug opportunity stages~GOpportuntySyncTest.testResolveA.coounbdvProject© Nudge, php 23.03.26, 10.59,781k8© NudgeRun,php 23.03.26, 10.59, 3.36© Opporte© Participant,.php 15.0€.26, 10.55, 18.A5© Partner.php 31.03.26, 16.02, 5.55 kg© Permission php 23.03.26, 10.59,132© PhoceNumber.php 23.03.26,10.39,4PaybackTheme.php 23.03.26, 10.59© Playbook,.php 23.03.26, 10:30, 5.38 kг© PlaytookCategory.php 23.03.26, 10© Playlst.php 23.03.26, 1059, 10.23 kв8.[IP_ADDRESS].[IP_ADDRESS]© RateLimit.php 23.03.26,10.38, 1.91 k8© Region,php 23.03.26, 1059, 844 B14.10.25 Ivanow© Role.php 10426, 1258,2.45 k814.10.25© RoleChangeÊvent.php 23.03.26,10117.01.25ScopeGroup, php 23.03.26, 10-59,1.714.10.25© Session.php 23.03.26, 1059, 8.75 k819.08.19 Grahal© SlackBot,php 23.03.26, 10:59, 2.79 kв8.08.18SocialAccount.php 23.03.26, [IP_ADDRESS].19 Graham© Stage.php 23.03.26, 10.59, 5.88 kB8.08.18 Crahan© Task.php 23.03.26, 1053, 4.35 k98.08.18© Team.php 30.03.26,10.30, €5.13 k8© TeamAlContext.php 23.03.26,10.39© TeamOomain.php 2303.26, 1059,18© TeamFeature,php 3.04.26,1100, 143© TeamSettings.php 3.04.26, 11:00, 141© TextRelay.php 23.03.26, 10:30, 3.5 kв© Track.php 23.03.26, 10.39, M.18 k85.06.19© TranscriptionModeL,php 23.03.26, K8.08.18© TranscriptionModelLocale.php 23c8.08.18© TranscriçtionProvider.php 23.03.24© User.php 104.26, 11:00, 41.23 kа© UserSettings.,php 3.04.26, 11.00, 605© Vocabulary.php 23.03.26, 10.59,2.828.10.24© VocabularyPronunclation.php 23.0g8.10.24© VoiceAccess.php 23.03.26, 10.59, 6.58.10.24CrmEntityRepository.php2.[IP_ADDRESS].[IP_ADDRESS].10.241761.10.24© Opportunity-phpxLead phpOpportunitySyneTrait.phpclass Opportunity extends Model iaplenentsprotected static function nesfactory(): Factory176 €18218218318418s186187return OpportunityFactory::new);& James Graham +4protected static function boot()statie::created(statie function (Oppertunity Sopportunity): void ‹Sopportunity-»stages()-›attach(Sopportunity->stage_id):F):statie::updating(static function (pportunity Sopportunity): void (1f (Sopportunity->isDirty( attrbutes*stage_1d*)) 4Sopportunáty-stage_updated_at • Carbon: :now):Sopportunity->stages()-›attach(Sopportunity->stage_1d):static::updated(static function (Opportunity Sopportunity): void {event(new OpportunityUpdated(Sopportunity)):1f (Sopportunity->wasChanged( attributes:"stage,1d')) €event(nex OpportunityStageUpdated(Sopportunity)):Reprecated& Ceorge Tuevpublic function deleteExistingAjPrompt(): voidGenericAiPrompt:: query()- GenericAiPronpt::PROMPT_TYPE_DEAL)GenericA1Prompt::SUBJECT_TYPE_OPPORTUNITY)OpportunitybOOtDNOmeet.google.com is sharing your screen.Oapp › app › Modeis › © Opportunity.php › Opportunity › - boot › LambdaPHP: 8.3 W Windsurf Teams190.14QFri 17 Ape 11:39A20 21 A У18Vasil Vasilevllian Kyuchukov2 othersNikolay NikolovLF UTF-8 G 4 spacesLukas Kovalik11:39 AM | Daily - Processing...
|
NULL
|
8827884515644970779
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileViewWindowEditHistoryBookmarksProfiles→ FirefoxFileViewWindowEditHistoryBookmarksProfiles→ToolsHelpmeet.google.com/xpx-omah-rknNikolay Nikolov (Presenting, annotating)• 0.Support Daily • in 3 h 21 m100% 1978 • Fri 17 Apr 11:39:45+PhpStorm -Fle$ Debug-opportunityWindowDebug opportunity stages~GOpportuntySyncTest.testResolveA.coounbdvProject© Nudge, php 23.03.26, 10.59,781k8© NudgeRun,php 23.03.26, 10.59, 3.36© Opporte© Participant,.php 15.0€.26, 10.55, 18.A5© Partner.php 31.03.26, 16.02, 5.55 kg© Permission php 23.03.26, 10.59,132© PhoceNumber.php 23.03.26,10.39,4PaybackTheme.php 23.03.26, 10.59© Playbook,.php 23.03.26, 10:30, 5.38 kг© PlaytookCategory.php 23.03.26, 10© Playlst.php 23.03.26, 1059, 10.23 kв8.[IP_ADDRESS].[IP_ADDRESS]© RateLimit.php 23.03.26,10.38, 1.91 k8© Region,php 23.03.26, 1059, 844 B14.10.25 Ivanow© Role.php 10426, 1258,2.45 k814.10.25© RoleChangeÊvent.php 23.03.26,10117.01.25ScopeGroup, php 23.03.26, 10-59,1.714.10.25© Session.php 23.03.26, 1059, 8.75 k819.08.19 Grahal© SlackBot,php 23.03.26, 10:59, 2.79 kв8.08.18SocialAccount.php 23.03.26, [IP_ADDRESS].19 Graham© Stage.php 23.03.26, 10.59, 5.88 kB8.08.18 Crahan© Task.php 23.03.26, 1053, 4.35 k98.08.18© Team.php 30.03.26,10.30, €5.13 k8© TeamAlContext.php 23.03.26,10.39© TeamOomain.php 2303.26, 1059,18© TeamFeature,php 3.04.26,1100, 143© TeamSettings.php 3.04.26, 11:00, 141© TextRelay.php 23.03.26, 10:30, 3.5 kв© Track.php 23.03.26, 10.39, M.18 k85.06.19© TranscriptionModeL,php 23.03.26, K8.08.18© TranscriptionModelLocale.php 23c8.08.18© TranscriçtionProvider.php 23.03.24© User.php 104.26, 11:00, 41.23 kа© UserSettings.,php 3.04.26, 11.00, 605© Vocabulary.php 23.03.26, 10.59,2.828.10.24© VocabularyPronunclation.php 23.0g8.10.24© VoiceAccess.php 23.03.26, 10.59, 6.58.10.24CrmEntityRepository.php2.[IP_ADDRESS].[IP_ADDRESS].10.241761.10.24© Opportunity-phpxLead phpOpportunitySyneTrait.phpclass Opportunity extends Model iaplenentsprotected static function nesfactory(): Factory176 €18218218318418s186187return OpportunityFactory::new);& James Graham +4protected static function boot()statie::created(statie function (Oppertunity Sopportunity): void ‹Sopportunity-»stages()-›attach(Sopportunity->stage_id):F):statie::updating(static function (pportunity Sopportunity): void (1f (Sopportunity->isDirty( attrbutes*stage_1d*)) 4Sopportunáty-stage_updated_at • Carbon: :now):Sopportunity->stages()-›attach(Sopportunity->stage_1d):static::updated(static function (Opportunity Sopportunity): void {event(new OpportunityUpdated(Sopportunity)):1f (Sopportunity->wasChanged( attributes:"stage,1d')) €event(nex OpportunityStageUpdated(Sopportunity)):Reprecated& Ceorge Tuevpublic function deleteExistingAjPrompt(): voidGenericAiPrompt:: query()- GenericAiPronpt::PROMPT_TYPE_DEAL)GenericA1Prompt::SUBJECT_TYPE_OPPORTUNITY)OpportunitybOOtDNOmeet.google.com is sharing your screen.Oapp › app › Modeis › © Opportunity.php › Opportunity › - boot › LambdaPHP: 8.3 W Windsurf Teams190.14QFri 17 Ape 11:39A20 21 A У18Vasil Vasilevllian Kyuchukov2 othersNikolay NikolovLF UTF-8 G 4 spacesLukas Kovalik11:39 AM | Daily - Processing...
|
NULL
|
|
22940
|
495
|
96
|
2026-04-15T10:55:42.700914+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776250542700_m2.jpg...
|
Boosteroid
|
Boosteroid
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
129177786539466/125VImperial AgeClick to select th 129177786539466/125VImperial AgeClick to select this building.Castlekovaliklukas (Britons)3282/58081/209 8/1111+2 (4)Q- 8+1Researching 33%Yeomen7 Basil the Macedonian: 7496/7496 ₽8 Ashikaga Takauji: 7159/7159Anceu Hualloc: 7105/7105AN3 Bird Jaguar: 6970/6970 @IV5 Honorius: 6936/69361 kovaliklukas: 6688/6688E IV4 Siddhraj Jaisingh: 6179/61799 Пi6 Mindaugas: 3486/3486...
|
NULL
|
8827809095196701402
|
NULL
|
click
|
ocr
|
NULL
|
129177786539466/125VImperial AgeClick to select th 129177786539466/125VImperial AgeClick to select this building.Castlekovaliklukas (Britons)3282/58081/209 8/1111+2 (4)Q- 8+1Researching 33%Yeomen7 Basil the Macedonian: 7496/7496 ₽8 Ashikaga Takauji: 7159/7159Anceu Hualloc: 7105/7105AN3 Bird Jaguar: 6970/6970 @IV5 Honorius: 6936/69361 kovaliklukas: 6688/6688E IV4 Siddhraj Jaisingh: 6179/61799 Пi6 Mindaugas: 3486/3486...
|
22938
|
|
79782
|
2077
|
12
|
2026-04-24T17:09:25.133481+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050565133_m1.jpg...
|
PhpStorm
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Activity MonitorFileEditViewWindow• 81Help(23APP ( Activity MonitorFileEditViewWindow• 81Help(23APP (-zsh)APP (-zsh)DOCKERDEV (-zsh)882*3What's next:Try Dockerseamless, persistent debugging tools in any containeror image + docker debugdocker_1amp_1at [URL_WITH_CREDENTIALS] (JY-20508-notify-before-AJ-report-expiration) $ csfixdocker exec-it docker_lamp_1./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.php-v--using-cache=no --diffPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski andcontributors.PHPruntime:8.3.30Running analysis on 7 coreswith 10 files perprocess.Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!Loaded config default from".php-cs-fixer.dist.php".5623/5623100%1) app/Console/Commands/JiminnyDebugCommand.php (statement_indentation)begin diff/home/jiminny/app/Console/Commands/JiminnyDebugCommand.php+++/home/jiminny/app/Console/Commands/JiminnyDebugCommand.php-40,7 +40,7AutomatedReportsRepository SautomatedReportsRepository,UserPilotClient SuserPilotClient): void {Suser= User::find(143);Suser = User::find(143);////Scount = SautomatedReportsRepository->countUserReports(Suser);Sthis->info("Count: {Scount}");Scount = SautomatedReportsRepository->countAllUserReports(Suser);end diffscreenpipe"O $4100% C8Fri 24 Apr 20:09:25-zshT₴1|*5APPFixed 1 of 5623 files in 148.623 seconds, 60.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any container or image » docker debug docker_lamp_1Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20508-notify-before-AJ-report-expiration) $ I...
|
NULL
|
8827236690730416681
|
NULL
|
click
|
ocr
|
NULL
|
Activity MonitorFileEditViewWindow• 81Help(23APP ( Activity MonitorFileEditViewWindow• 81Help(23APP (-zsh)APP (-zsh)DOCKERDEV (-zsh)882*3What's next:Try Dockerseamless, persistent debugging tools in any containeror image + docker debugdocker_1amp_1at [URL_WITH_CREDENTIALS] (JY-20508-notify-before-AJ-report-expiration) $ csfixdocker exec-it docker_lamp_1./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.php-v--using-cache=no --diffPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski andcontributors.PHPruntime:8.3.30Running analysis on 7 coreswith 10 files perprocess.Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!Loaded config default from".php-cs-fixer.dist.php".5623/5623100%1) app/Console/Commands/JiminnyDebugCommand.php (statement_indentation)begin diff/home/jiminny/app/Console/Commands/JiminnyDebugCommand.php+++/home/jiminny/app/Console/Commands/JiminnyDebugCommand.php-40,7 +40,7AutomatedReportsRepository SautomatedReportsRepository,UserPilotClient SuserPilotClient): void {Suser= User::find(143);Suser = User::find(143);////Scount = SautomatedReportsRepository->countUserReports(Suser);Sthis->info("Count: {Scount}");Scount = SautomatedReportsRepository->countAllUserReports(Suser);end diffscreenpipe"O $4100% C8Fri 24 Apr 20:09:25-zshT₴1|*5APPFixed 1 of 5623 files in 148.623 seconds, 60.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any container or image » docker debug docker_lamp_1Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20508-notify-before-AJ-report-expiration) $ I...
|
79779
|
|
44648
|
941
|
69
|
2026-04-17T08:56:21.910757+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776416181910_m1.jpg...
|
PhpStorm
|
faVsco.js – OpportunitySyncTrait.php
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+FirefoxFileEditViewHistoryBookmarksProfilesToolsW +FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelpQ.meet.google.com/xpx-omah-rknllian Kyuchukov (Presenting, annotating)PhpStormHeip(c) OocortunityPel0 Hис"weeookzyoe22 591class OpportunityPendingAiAnalysisAfterStageChanged inplenents ShouldQueue|handle(OpportunityStageUpdated Sevent):upporconasy a5 Scocooted tor anatysts.l• sopportunaty-geciol).=> Stean-›getId(),UENNAHUANNNWN1):foreach (StenplateFieldIds6roupedByScope as StenplateFieldIds) {Sthis-seventDispatcher->dispatch(new RunOpportunityAiAnalysis(opportunityld: Sopportunâty-sgetidO.craTenplateFieldsIds: StenplateFieldIds.triggerId: Sopportunity-›getid0.triggerType: CraTenplateRun::TRIGSER_OPPORTUNITY,craobjectType: Field::0BJECT_OPPORTUNITY,craobjectIds: [Sopportunity-ygetidO).Sthis->LogTenplateHistory(Stenplates):118119CSg apublic function failed(Throuable Sexception): void122121124|Sthis-›logllarning( message: 'Failed to process opportunity AI analysis'. E|"excsptzon" " pexcеpizon- gechessagels"trace' => Sexception-›getTraceAsStringO, |(allSupport Daily • in 3 h 4 m100% <478 • Fri 17 Apr 11:56:21USubmiAudiof ileServiceTest v) dindNew Cascade• Q 8• Fr17 Apr 11:56.+ 0.llian KyuchukovJpNikolay NikolovWCascade Code xoGAoк oлenca procot mene crlaneeaacross your entire codebase.Vasil VasilevMihail MihaylovPendingAlAnalysisAfterStageChanged » handieDAsk anything (XOL)W: Windsurf Teams (Pre-Release)Symfony8172 LFUTF-8Co 4 spacesIs master •NORMALLukas Kovalik11:56 AM | Daily - ProcessingLộ3...
|
NULL
|
8827236310585701439
|
NULL
|
click
|
ocr
|
NULL
|
+FirefoxFileEditViewHistoryBookmarksProfilesToolsW +FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelpQ.meet.google.com/xpx-omah-rknllian Kyuchukov (Presenting, annotating)PhpStormHeip(c) OocortunityPel0 Hис"weeookzyoe22 591class OpportunityPendingAiAnalysisAfterStageChanged inplenents ShouldQueue|handle(OpportunityStageUpdated Sevent):upporconasy a5 Scocooted tor anatysts.l• sopportunaty-geciol).=> Stean-›getId(),UENNAHUANNNWN1):foreach (StenplateFieldIds6roupedByScope as StenplateFieldIds) {Sthis-seventDispatcher->dispatch(new RunOpportunityAiAnalysis(opportunityld: Sopportunâty-sgetidO.craTenplateFieldsIds: StenplateFieldIds.triggerId: Sopportunity-›getid0.triggerType: CraTenplateRun::TRIGSER_OPPORTUNITY,craobjectType: Field::0BJECT_OPPORTUNITY,craobjectIds: [Sopportunity-ygetidO).Sthis->LogTenplateHistory(Stenplates):118119CSg apublic function failed(Throuable Sexception): void122121124|Sthis-›logllarning( message: 'Failed to process opportunity AI analysis'. E|"excsptzon" " pexcеpizon- gechessagels"trace' => Sexception-›getTraceAsStringO, |(allSupport Daily • in 3 h 4 m100% <478 • Fri 17 Apr 11:56:21USubmiAudiof ileServiceTest v) dindNew Cascade• Q 8• Fr17 Apr 11:56.+ 0.llian KyuchukovJpNikolay NikolovWCascade Code xoGAoк oлenca procot mene crlaneeaacross your entire codebase.Vasil VasilevMihail MihaylovPendingAlAnalysisAfterStageChanged » handieDAsk anything (XOL)W: Windsurf Teams (Pre-Release)Symfony8172 LFUTF-8Co 4 spacesIs master •NORMALLukas Kovalik11:56 AM | Daily - ProcessingLộ3...
|
NULL
|
|
52311
|
1130
|
32
|
2026-04-20T06:50:24.325776+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776667824325_m1.jpg...
|
Firefox
|
[JY-18909] [Part2] Automated reports with Ask Jimi [JY-18909] [Part2] Automated reports with Ask Jiminny - Jira — Work...
|
True
|
jiminny.atlassian.net/browse/JY-18909
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
[JY-18909] [Part2] Automated reports with Ask Jimi [JY-18909] [Part2] Automated reports with Ask Jiminny - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app
JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app
JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app
JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app
[JY-20543] AJ Reports > Tracking - Jira
[JY-20543] AJ Reports > Tracking - Jira
[JY-18909] [Part2] Automated reports with Ask Jiminny - Jira
[JY-18909] [Part2] Automated reports with Ask Jiminny - Jira
Ask Jiminny Reports by nikolay-yankov · Pull Request #11894 · jiminny/app
Ask Jiminny Reports by nikolay-yankov · Pull Request #11894 · jiminny/app
New Tab
New Tab
Product Growth Platform | Userpilot
Product Growth Platform | Userpilot
Userpilot | Events
Userpilot | Events
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:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"[JY-18909] [Part2] Automated reports with Ask Jiminny - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXRadioButton","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":4,"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,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20543] AJ Reports > Tracking - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20543] AJ Reports > Tracking - Jira","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-18909] [Part2] Automated reports with Ask Jiminny - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-18909] [Part2] Automated reports with Ask Jiminny - Jira","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Ask Jiminny Reports by nikolay-yankov · Pull Request #11894 · jiminny/app","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Jiminny Reports by nikolay-yankov · Pull Request #11894 · jiminny/app","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Product Growth Platform | Userpilot","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Product Growth Platform | Userpilot","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Userpilot | Events","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Userpilot | Events","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Bookmarks","depth":5,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Bookmarks","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close sidebar","depth":6,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextField","text":"Search bookmarks","depth":7,"help_text":"","role_description":"search text field","subrole":"AXSearchField","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8826457473390703064
|
1322197920464725639
|
click
|
accessibility
|
NULL
|
[JY-18909] [Part2] Automated reports with Ask Jimi [JY-18909] [Part2] Automated reports with Ask Jiminny - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app
JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app
JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app
JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app
[JY-20543] AJ Reports > Tracking - Jira
[JY-20543] AJ Reports > Tracking - Jira
[JY-18909] [Part2] Automated reports with Ask Jiminny - Jira
[JY-18909] [Part2] Automated reports with Ask Jiminny - Jira
Ask Jiminny Reports by nikolay-yankov · Pull Request #11894 · jiminny/app
Ask Jiminny Reports by nikolay-yankov · Pull Request #11894 · jiminny/app
New Tab
New Tab
Product Growth Platform | Userpilot
Product Growth Platform | Userpilot
Userpilot | Events
Userpilot | Events
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:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps...
|
NULL
|
|
5206
|
96
|
84
|
2026-04-13T13:03:30.974441+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-13/1776 /Users/lukas/.screenpipe/data/data/2026-04-13/1776085410974_m1.jpg...
|
Boosteroid
|
Boosteroid
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp•DOCKER* Unable to access screenpipe activity dataO $1DEV (-zsh)O 882APP (-zsh)• *3-zsh• 84-zsh• 25-zsh86-zsh®Bash(curl -s "http://localhost:3030/search?content_type=ocr&start_time=2026-04-11T00:00:00Z&end_time=2026-04-13T23:59:59Z&limit=5000&offset=0"L Running..95% CRMon 13 Apr 16:03:30181O 87* Unable to access s...sash commandcurl-s "http://localhost:3030/search?content_type=ocr&start_time=2026-04-11T00:00:00Z&end_time=2026-04-13T23:59:59Z&limit=5000&offset=0"import json, sysfrom collections import defaultdictpython3 -c "data = json.load(sys.stdin)items = data.get('data', [])apps = defaultdict(int)windows = defaultdict(int)for item in items:c = item.get('content', (})app = c.get('app_name'"Unknown") orwindow = C.get('window_name', ""S or Unknown'apps[app] += 1if window:windows [f'[{app}] {window}'] += 1print(f'Total frames: {len(items)}')printOprint('=== Apps (frames) ===')for app, count in sorted(apps.items(), key=lambda x: -x[1]):print(f'{app}: {count}')printOprint('=== Top Windows ===')for w, count in sorted(windows.items(), key=lambda x: -x[1])[:25]:print(f' {count:4d}x {w[:110]}')" 2>81Run shell commando you want to proceed?• 1.Yes2.Yes, and don't ask again for similar commands in /Users/lukas3. Noisc to cancel • Tab to amend• ctrl+e to explain...
|
NULL
|
8826151923527093731
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp•DOCKER* Unable to access screenpipe activity dataO $1DEV (-zsh)O 882APP (-zsh)• *3-zsh• 84-zsh• 25-zsh86-zsh®Bash(curl -s "http://localhost:3030/search?content_type=ocr&start_time=2026-04-11T00:00:00Z&end_time=2026-04-13T23:59:59Z&limit=5000&offset=0"L Running..95% CRMon 13 Apr 16:03:30181O 87* Unable to access s...sash commandcurl-s "http://localhost:3030/search?content_type=ocr&start_time=2026-04-11T00:00:00Z&end_time=2026-04-13T23:59:59Z&limit=5000&offset=0"import json, sysfrom collections import defaultdictpython3 -c "data = json.load(sys.stdin)items = data.get('data', [])apps = defaultdict(int)windows = defaultdict(int)for item in items:c = item.get('content', (})app = c.get('app_name'"Unknown") orwindow = C.get('window_name', ""S or Unknown'apps[app] += 1if window:windows [f'[{app}] {window}'] += 1print(f'Total frames: {len(items)}')printOprint('=== Apps (frames) ===')for app, count in sorted(apps.items(), key=lambda x: -x[1]):print(f'{app}: {count}')printOprint('=== Top Windows ===')for w, count in sorted(windows.items(), key=lambda x: -x[1])[:25]:print(f' {count:4d}x {w[:110]}')" 2>81Run shell commando you want to proceed?• 1.Yes2.Yes, and don't ask again for similar commands in /Users/lukas3. Noisc to cancel • Tab to amend• ctrl+e to explain...
|
5205
|
|
56822
|
1228
|
3
|
2026-04-20T11:31:37.341683+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776684697341_m2.jpg...
|
PhpStorm
|
PhpStorm
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormVIewINavigarecodeLaravelKeractorWindowmelp PhostormVIewINavigarecodeLaravelKeractorWindowmelpFV faVsco.js#11894 on JY-18909-automated-reports-ask-Proiect v<> Untitled Diagram.xmlus vetur.contig.sM+ WEBHOOK_FILTERING_IMPLEMENTATI›Ub exiemal Liorariesv E Scratches and Consolesv _ Database consolesV AEU& console EUI& DEAL RISKS |EUIL DI EUIAEU (EUTv A lminnvalocalhostconsole fliminnv@localhost)lD| lliminnv@localhostlHS local fiminnv@localhost)l4 SF jiminny@localhost]& zoho_dev jiminny@localhost]V & PROD# concole [DROn1"C) ActivitvController.ohnphp 2026_03_20_000000_add_ask _jiminny_fields_to_automated_reports_table.php X ©AskAnythingController.php= custom.log= laravel.logA SF [jiminny@localhost] x 4 HS_local [jiminny@localhost]& console [Pkol)© AskJiminnyReportsController.phpC) AutomatedReportsRepository.onpC) AutomatedReportsService.onpTx: AutovLIMI 10:Servicesv D Databaseconsolev A liminnv@localhost#HS local4 SF 2 s 624 ms.APROD« consoleASTAGINGIconsoleDockerreturn new class " extends Migration {public function up(): voidSchema:: tablec table'automated reports', function (Blueprint Stable) {A4У3л y 189190select * from teams where id = 3143;select * from crm_configurations where id = 500;select * from users where name = 'Integration Account"; # 1695SELECT * FROM social_accounts WHERE sociable_id = 1695;->onvelecelrescriccnStable->forelan@ columns:'ask_anything_prompt1d')select * from activities where crm_configuration_id = 39and recording_state = 'recorded' and duration > 60and status = 'completed' and actual_start_time >= '2025-12-01'->onc tabask_anvthina prompts'->ondelete('restrict')^197SELECT * FROM activities WHERE uuid_to_bin('458cf915-b914-4000-b083-5687b32b2956') = uuid;* Reverse the miarationsOutputii liminnv.activities XITx.it_id Y<null><null><null><null><nul<null)<null><null>T device id YW type Y<null> conference<null> conference<null> conterence<null> conferenceI playbook_category_id Ydeuser_id YL° lead_id YIo account_id YM. contact id YIe opportunity_id YM stage id YI valueLe crm_configuration_id Y<nu conference<null> confenenco<null> conference<null»685010<null><null><null><nui)<null> conference<null> softphone-inboundsnull› conterence<null> conference<nul conference1391<null>3293<null> <null><null><null> <null><null><null><nul»<null><null>178<null>178177<nul1s<nul1><null>41184448<nul2040<null)10951791786198395817071707<null><null><nul><nul1)<null><null><null)5007143<null><null><null>17739695843<null><null>5912283<null><null><null><nuih)204204<null><null><nul2021<null>SnULl>198207<null>204<null><null><null><null>455554.00<null>21000.00200AA.90<nul1)<nuLL455554.00<nul> conference143143143<nuih»178178958<nunh»355.0010001.0010001.00<null)80000.00# console [eu)100% LzMon 20 Apr 14:31:37AskJiminnyReportActivityServiceTest v& console [STAGING]So jiminny010 A12 V.2 X4 ^II 11CSVv1o transcrintion 1dYW crm_provider_id V39 <null>39 <null>39 00U0400000nz54zMAA39 <null39 0OT2000000&TMAUEA4Z0 AQ12aA00A02ATONEAM39 <nulls39 <null:39 00U040000003YLJMA239 00U0400000086F0MA039 <null39 <null:39 <null>39 <null>39 <nul1:W language Yen_USen_USen_USenUsen-UsenlISen_USen_USenUsen_USen_USen_US<null><null><null>en GR <null><null><null>NN Windeurf Toame 10/01UITC.9Aenssoe...
|
NULL
|
8825956337289082134
|
NULL
|
visual_change
|
ocr
|
NULL
|
PhostormVIewINavigarecodeLaravelKeractorWindowmelp PhostormVIewINavigarecodeLaravelKeractorWindowmelpFV faVsco.js#11894 on JY-18909-automated-reports-ask-Proiect v<> Untitled Diagram.xmlus vetur.contig.sM+ WEBHOOK_FILTERING_IMPLEMENTATI›Ub exiemal Liorariesv E Scratches and Consolesv _ Database consolesV AEU& console EUI& DEAL RISKS |EUIL DI EUIAEU (EUTv A lminnvalocalhostconsole fliminnv@localhost)lD| lliminnv@localhostlHS local fiminnv@localhost)l4 SF jiminny@localhost]& zoho_dev jiminny@localhost]V & PROD# concole [DROn1"C) ActivitvController.ohnphp 2026_03_20_000000_add_ask _jiminny_fields_to_automated_reports_table.php X ©AskAnythingController.php= custom.log= laravel.logA SF [jiminny@localhost] x 4 HS_local [jiminny@localhost]& console [Pkol)© AskJiminnyReportsController.phpC) AutomatedReportsRepository.onpC) AutomatedReportsService.onpTx: AutovLIMI 10:Servicesv D Databaseconsolev A liminnv@localhost#HS local4 SF 2 s 624 ms.APROD« consoleASTAGINGIconsoleDockerreturn new class " extends Migration {public function up(): voidSchema:: tablec table'automated reports', function (Blueprint Stable) {A4У3л y 189190select * from teams where id = 3143;select * from crm_configurations where id = 500;select * from users where name = 'Integration Account"; # 1695SELECT * FROM social_accounts WHERE sociable_id = 1695;->onvelecelrescriccnStable->forelan@ columns:'ask_anything_prompt1d')select * from activities where crm_configuration_id = 39and recording_state = 'recorded' and duration > 60and status = 'completed' and actual_start_time >= '2025-12-01'->onc tabask_anvthina prompts'->ondelete('restrict')^197SELECT * FROM activities WHERE uuid_to_bin('458cf915-b914-4000-b083-5687b32b2956') = uuid;* Reverse the miarationsOutputii liminnv.activities XITx.it_id Y<null><null><null><null><nul<null)<null><null>T device id YW type Y<null> conference<null> conference<null> conterence<null> conferenceI playbook_category_id Ydeuser_id YL° lead_id YIo account_id YM. contact id YIe opportunity_id YM stage id YI valueLe crm_configuration_id Y<nu conference<null> confenenco<null> conference<null»685010<null><null><null><nui)<null> conference<null> softphone-inboundsnull› conterence<null> conference<nul conference1391<null>3293<null> <null><null><null> <null><null><null><nul»<null><null>178<null>178177<nul1s<nul1><null>41184448<nul2040<null)10951791786198395817071707<null><null><nul><nul1)<null><null><null)5007143<null><null><null>17739695843<null><null>5912283<null><null><null><nuih)204204<null><null><nul2021<null>SnULl>198207<null>204<null><null><null><null>455554.00<null>21000.00200AA.90<nul1)<nuLL455554.00<nul> conference143143143<nuih»178178958<nunh»355.0010001.0010001.00<null)80000.00# console [eu)100% LzMon 20 Apr 14:31:37AskJiminnyReportActivityServiceTest v& console [STAGING]So jiminny010 A12 V.2 X4 ^II 11CSVv1o transcrintion 1dYW crm_provider_id V39 <null>39 <null>39 00U0400000nz54zMAA39 <null39 0OT2000000&TMAUEA4Z0 AQ12aA00A02ATONEAM39 <nulls39 <null:39 00U040000003YLJMA239 00U0400000086F0MA039 <null39 <null:39 <null>39 <null>39 <nul1:W language Yen_USen_USen_USenUsen-UsenlISen_USen_USenUsen_USen_USen_US<null><null><null>en GR <null><null><null>NN Windeurf Toame 10/01UITC.9Aenssoe...
|
56821
|
|
4484
|
85
|
75
|
2026-04-13T12:23:04.164633+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-13/1776 /Users/lukas/.screenpipe/data/data/2026-04-13/1776082984164_m1.jpg...
|
Boosteroid
|
Boosteroid
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp* Unable to access screenpipe activity data-zsh• 84-zsh• 25lal]86% [8Mon 13 Apr 15:23:03181* Unable to access s...X8DOCKERO ₴1DEV (-zsh)Claude (~5 min)- Used Claude,likelyrelatedO 882APP (-zsh)• *3-zsh86-zsh®O 87screenpipe work (querying the screenpipe search API)TL;DR: Mostly a devdayfocusedon building something with screenpipe data (a reporting UI), some light work task-checking on Jira/email, and evening readingon Slovak news.what did I dotodayso farThe screenpipe MCPserver has disconnected, so I can't query your activity right now.You'd need to reconnect it to get today's summary.You can try restartingthe screenpipe MCP server and then ask again.give me summary forlast 48 hoursThe screenpipe MCPserver is stilldisconnected - I don't have access to those tools. You'llneed to reconnect it first.If screenpipe is running locally, you can try restarting the MCP server or check its status with ! screenpipe or however you normally manage it.it is healhty and running, chekc againThe tools aren't showing up in my session even though screenpipe is running. This likely means the MCP connection needs to be re-established on the Claude Code side.Try running ! claude mep list to check the MCP server status, or restart Claude Code to reconnect the screenpipe MCP server.claude mep listBash(claude mcp list)Running..sash commandclaude mcp listRun shell commandhis command requires approvalo you want to proceed?• 1.Yes2.Yes, and don't ask again for: claude mcp:*3. Noisc to cancel • Tab to amend • ctrl+e to explain...
|
NULL
|
8825380168806191237
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp* Unable to access screenpipe activity data-zsh• 84-zsh• 25lal]86% [8Mon 13 Apr 15:23:03181* Unable to access s...X8DOCKERO ₴1DEV (-zsh)Claude (~5 min)- Used Claude,likelyrelatedO 882APP (-zsh)• *3-zsh86-zsh®O 87screenpipe work (querying the screenpipe search API)TL;DR: Mostly a devdayfocusedon building something with screenpipe data (a reporting UI), some light work task-checking on Jira/email, and evening readingon Slovak news.what did I dotodayso farThe screenpipe MCPserver has disconnected, so I can't query your activity right now.You'd need to reconnect it to get today's summary.You can try restartingthe screenpipe MCP server and then ask again.give me summary forlast 48 hoursThe screenpipe MCPserver is stilldisconnected - I don't have access to those tools. You'llneed to reconnect it first.If screenpipe is running locally, you can try restarting the MCP server or check its status with ! screenpipe or however you normally manage it.it is healhty and running, chekc againThe tools aren't showing up in my session even though screenpipe is running. This likely means the MCP connection needs to be re-established on the Claude Code side.Try running ! claude mep list to check the MCP server status, or restart Claude Code to reconnect the screenpipe MCP server.claude mep listBash(claude mcp list)Running..sash commandclaude mcp listRun shell commandhis command requires approvalo you want to proceed?• 1.Yes2.Yes, and don't ask again for: claude mcp:*3. Noisc to cancel • Tab to amend • ctrl+e to explain...
|
NULL
|
|
79296
|
2050
|
12
|
2026-04-24T15:58:01.939324+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777046281939_m2.jpg...
|
iTerm2
|
DOCKER (docker-compose)
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Fri Apr 24 11:52:17 on ttys011
Poetry Last login: Fri Apr 24 11:52:17 on ttys011
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/infrastructure/dev/docker or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/infrastructure/dev/docker or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/infrastructure/dev/docker (develop) $ work
WARN[0000] /Users/lukas/jiminny/infrastructure/dev/docker/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 1/1
✔ Container docker_lamp_1 Running 0.0s
Attaching to blackfire-1, datadog-1, jiminny_ext-1, mariadb-1, docker_lamp_1, elasticsearch, kibana, ngrok, redis
docker_lamp_1 | 2026-04-24 15:57:06,990 INFO spawned: 'worker-audio_00' with pid 23688
docker_lamp_1 | 2026-04-24 15:57:08,013 INFO success: worker-audio_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
blackfire-1 | [2026-04-24T15:57:12Z] ERROR: The server ID parameter is not set. Please run 'blackfire-agent -register' to configure it.
blackfire-1 | usage blackfire-agent [options]
blackfire-1 | --collector="[URL_WITH_CREDENTIALS] ~ $
Menu
⌥2 PROD (-zsh)
Last login: Fri Apr 24 11:52:17 on ttys011
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 ~ $
Menu
⌥3 EU (-zsh)
Last login: Fri Apr 24 11:52:17 on ttys011
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 ~ $
Menu
⌥4 STAGE (-zsh)
Last login: Fri Apr 24 11:52:17 on ttys011
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 ~ $
Menu
⌥5 QA (-zsh)
Last login: Fri Apr 24 11:52:17 on ttys011
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 ~ $
Menu
⌥6 FE (-zsh)
Last login: Fri Apr 24 11:52:17 on ttys011
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 ~ $
Menu
⌥7 EXT (-zsh)
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (docker)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
⌥⌘1
DOCKER (docker-compose)...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Fri Apr 24 11:52:17 on ttys011\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/infrastructure/dev/docker or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/infrastructure/dev/docker or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/infrastructure/dev/docker (develop) $ work\nWARN[0000] /Users/lukas/jiminny/infrastructure/dev/docker/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion \n[+] Running 1/1\n ✔ Container docker_lamp_1 Running 0.0s \nAttaching to blackfire-1, datadog-1, jiminny_ext-1, mariadb-1, docker_lamp_1, elasticsearch, kibana, ngrok, redis\ndocker_lamp_1 | 2026-04-24 15:57:06,990 INFO spawned: 'worker-audio_00' with pid 23688\ndocker_lamp_1 | 2026-04-24 15:57:08,013 INFO success: worker-audio_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)\nblackfire-1 | [2026-04-24T15:57:12Z] ERROR: The server ID parameter is not set. Please run 'blackfire-agent -register' to configure it.\nblackfire-1 | usage blackfire-agent [options]\nblackfire-1 | --collector=\"https://blackfire.io\": Sets the URL of Blackfire's data collector\nblackfire-1 | --config=\"/etc/blackfire/agent\": Sets the path to the configuration file\nblackfire-1 | -d: Prints the current configuration\nblackfire-1 | --http-proxy=\"\": Sets the HTTP proxy to use\nblackfire-1 | --https-proxy=\"\": Sets the HTTPS proxy to use\nblackfire-1 | --log-file=\"stderr\": Sets the path of the log file. Use stderr to log to stderr\nblackfire-1 | --log-level=\"1\": log verbosity level (4: debug, 3: info, 2: warning, 1: error)\nblackfire-1 | --register: Helps you with registering the agent\nblackfire-1 | --server-id=\"\": Sets the server id used to authenticate with Blackfire API\nblackfire-1 | --server-token=\"\": Sets the server token used to authenticate with Blackfire API. It is unsafe to set this from the command line\nblackfire-1 | --socket=\"unix:///var/run/blackfire/agent.sock\": Sets the socket the agent should read traces from. Possible value can be a unix socket or a TCP address. ie: unix:///var/run/blackfire/agent.sock or tcp://127.0.0.1:8307\nblackfire-1 | --test: Tests the configuration\nblackfire-1 | --timeout=\"15s\": Sets the Blackfire connection timeout\nblackfire-1 | -v: Prints the version number\nmariadb-1 | 2026-04-24 15:57:12+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:11.4.5+maria~ubu2404 started.\nredis | 1:C 24 Apr 2026 15:57:13.290 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo\nredis | 1:C 24 Apr 2026 15:57:13.292 # Redis version=5.0.14, bits=64, commit=00000000, modified=0, pid=1, just started\nredis | 1:C 24 Apr 2026 15:57:13.292 # Configuration loaded\nredis | 1:M 24 Apr 2026 15:57:13.334 * Running mode=standalone, port=6379.\nredis | 1:M 24 Apr 2026 15:57:13.334 # Server initialized\nredis | 1:M 24 Apr 2026 15:57:13.334 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.\nredis | 1:M 24 Apr 2026 15:57:13.349 * Reading RDB preamble from AOF file...\nredis | 1:M 24 Apr 2026 15:57:13.351 * Reading the remaining AOF tail...\nngrok | t=2026-04-24T15:57:13+0000 lvl=info msg=\"no configuration paths supplied\"\nngrok | t=2026-04-24T15:57:13+0000 lvl=info msg=\"using configuration at default config path\" path=/home/ngrok/.ngrok2/ngrok.yml\nngrok | t=2026-04-24T15:57:13+0000 lvl=info msg=\"open config file\" path=/home/ngrok/.ngrok2/ngrok.yml err=nil\nngrok | t=2026-04-24T15:57:14+0000 lvl=info msg=\"starting web service\" obj=web addr=0.0.0.0:4040\nblackfire-1 exited with code 1\nngrok | t=2026-04-24T15:57:15+0000 lvl=info msg=\"tunnel session started\" obj=tunnels.session\nngrok | t=2026-04-24T15:57:15+0000 lvl=info msg=\"client session established\" obj=csess id=56b3c75875b2\nngrok | t=2026-04-24T15:57:16+0000 lvl=info msg=\"started tunnel\" obj=tunnels name=\"command_line (http)\" addr=http://lamp:3080 url=http://lukask.ngrok.io\nngrok | t=2026-04-24T15:57:16+0000 lvl=info msg=\"started tunnel\" obj=tunnels name=command_line addr=http://lamp:3080 url=https://lukask.ngrok.io\njiminny_ext-1 exited with code 0\ndatadog-1 | [s6-init] making user provided files available at /var/run/s6/etc...exited 0.\nngrok | t=2026-04-24T15:57:19+0000 lvl=warn msg=\"failed to check for update\" obj=updater err=\"Post \\\"https://update.equinox.io/check\\\": context deadline exceeded\"\nmariadb-1 | 2026-04-24 15:57:21+00:00 [Warn] [Entrypoint]: /sys/fs/cgroup///memory.pressure not writable, functionality unavailable to MariaDB\nmariadb-1 | 2026-04-24 15:57:21+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'\nmariadb-1 | 2026-04-24 15:57:22+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:11.4.5+maria~ubu2404 started.\ndatadog-1 | [s6-init] ensuring user provided files have correct perms...exited 0.\ndatadog-1 | [fix-attrs.d] applying ownership & permissions fixes...\ndatadog-1 | [fix-attrs.d] done.\ndatadog-1 | [cont-init.d] executing container initialization scripts...\ndatadog-1 | [cont-init.d] 01-check-apikey.sh: executing... \nmariadb-1 | 2026-04-24 15:57:26+00:00 [Note] [Entrypoint]: MariaDB upgrade information missing, assuming required\nmariadb-1 | 2026-04-24 15:57:26+00:00 [Note] [Entrypoint]: MariaDB upgrade (mariadb-upgrade or creating healthcheck users) required, but skipped due to $MARIADB_AUTO_UPGRADE setting\ndatadog-1 | \ndatadog-1 | ==================================================================================\ndatadog-1 | You must set an DD_API_KEY environment variable to run the Datadog Agent container\ndatadog-1 | ==================================================================================\ndatadog-1 | \ndatadog-1 | [cont-init.d] 01-check-apikey.sh: exited 1.\nmariadb-1 | 2026-04-24 15:57:27 0 [Note] Starting MariaDB 11.4.5-MariaDB-ubu2404 source revision 0771110266ff5c04216af4bf1243c65f8c67ccf4 server_uid 4vwyAM0Bugoxc+dNtHbhP3Kqz+Q= as process 1\nmariadb-1 | 2026-04-24 15:57:28 0 [Note] InnoDB: Compressed tables use zlib 1.3\nmariadb-1 | 2026-04-24 15:57:28 0 [Note] InnoDB: Number of transaction pools: 1\nmariadb-1 | 2026-04-24 15:57:28 0 [Note] InnoDB: Using ARMv8 crc32 + pmull instructions\nmariadb-1 | 2026-04-24 15:57:28 0 [Note] InnoDB: Using liburing\nmariadb-1 | 2026-04-24 15:57:28 0 [Note] InnoDB: Initializing buffer pool, total size = 128.000MiB, chunk size = 2.000MiB\nmariadb-1 | 2026-04-24 15:57:28 0 [Note] InnoDB: Completed initialization of buffer pool\nmariadb-1 | 2026-04-24 15:57:28 0 [Note] InnoDB: File system buffers for log disabled (block size=512 bytes)\nmariadb-1 | 2026-04-24 15:57:29 0 [Note] InnoDB: End of log at LSN=7620292277\nmariadb-1 | 2026-04-24 15:57:30 0 [Note] InnoDB: Opened 3 undo tablespaces\nmariadb-1 | 2026-04-24 15:57:30 0 [Note] InnoDB: 128 rollback segments in 3 undo tablespaces are active.\ndatadog-1 exited with code 1\nmariadb-1 | 2026-04-24 15:57:30 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically writing the file full; Please wait ...\nmariadb-1 | 2026-04-24 15:57:30 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.\nmariadb-1 | 2026-04-24 15:57:30 0 [Note] InnoDB: log sequence number 7620292277; transaction id 11495688\nmariadb-1 | 2026-04-24 15:57:30 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool\nmariadb-1 | 2026-04-24 15:57:31 0 [Note] Plugin 'FEEDBACK' is disabled.\nmariadb-1 | 2026-04-24 15:57:31 0 [Note] Plugin 'wsrep-provider' is disabled.\nmariadb-1 | 2026-04-24 15:57:34 0 [Note] InnoDB: Buffer pool(s) load completed at 260424 15:57:34\nmariadb-1 | 2026-04-24 15:57:40 0 [Note] Server socket created on IP: '0.0.0.0'.\nmariadb-1 | 2026-04-24 15:57:40 0 [Note] Server socket created on IP: '::'.\nmariadb-1 | 2026-04-24 15:57:41 0 [Note] mariadbd: Event Scheduler: Loaded 0 events\nmariadb-1 | 2026-04-24 15:57:41 0 [Note] mariadbd: ready for connections.\nmariadb-1 | Version: '11.4.5-MariaDB-ubu2404' socket: '/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution\ndocker_lamp_1 | \ndocker_lamp_1 | RedisException \ndocker_lamp_1 | \ndocker_lamp_1 | LOADING Redis is loading the dataset in memory\ndocker_lamp_1 | \ndocker_lamp_1 | at vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:119\ndocker_lamp_1 | \ndocker_lamp_1 | RedisException \ndocker_lamp_1 | \ndocker_lamp_1 | LOADING Redis is loading the dataset in memory\ndocker_lamp_1 | \ndocker_lamp_1 | at vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:119\ndocker_lamp_1 | 115▕ {\ndocker_lamp_1 | 116▕ $start = microtime(true);\ndocker_lamp_1 | 117▕ \ndocker_lamp_1 | 118▕ try {\ndocker_lamp_1 | ➜ 119▕ $result = $this->client->{$method}(...$parameters);\ndocker_lamp_1 | 120▕ } catch (Throwable $e) {\ndocker_lamp_1 | 121▕ $this->events?->dispatch(new CommandFailed(\ndocker_lamp_1 | 122▕ $method, $this->parseParametersForEvent($parameters), $e, $this\ndocker_lamp_1 | 123▕ ));\ndocker_lamp_1 | \ndocker_lamp_1 | +5 vendor frames \ndocker_lamp_1 | \ndocker_lamp_1 | 6 app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php:93\ndocker_lamp_1 | Illuminate\\Support\\Facades\\Facade::__callStatic(\"get\")\ndocker_lamp_1 | \ndocker_lamp_1 | 7 app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php:49\ndocker_lamp_1 | Jiminny\\Console\\Commands\\Elasticsearch\\AsyncUpdateEsEntities::logListSize(\"activities\")\ndocker_lamp_1 | \ndocker_lamp_1 | 115▕ {\ndocker_lamp_1 | 116▕ $start = microtime(true);\ndocker_lamp_1 | 117▕ \ndocker_lamp_1 | 118▕ try {\ndocker_lamp_1 | ➜ 119▕ $result = $this->client->{$method}(...$parameters);\ndocker_lamp_1 | 120▕ } catch (Throwable $e) {\ndocker_lamp_1 | 121▕ $this->events?->dispatch(new CommandFailed(\ndocker_lamp_1 | 122▕ $method, $this->parseParametersForEvent($parameters), $e, $this\ndocker_lamp_1 | 123▕ ));\ndocker_lamp_1 | \ndocker_lamp_1 | +22 vendor frames \ndocker_lamp_1 | \ndocker_lamp_1 | 23 artisan:13\ndocker_lamp_1 | Illuminate\\Foundation\\Application::handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))\ndocker_lamp_1 | \ndocker_lamp_1 | 2026-04-24 15:57:43,598 WARN exited: worker-es-update_00 (exit status 1; not expected)\ndocker_lamp_1 | 2026-04-24 15:57:43,617 INFO spawned: 'worker-es-update_00' with pid 23773\ndocker_lamp_1 | 2026-04-24 15:57:43,633 WARN exited: worker_00 (exit status 1; not expected)\ndocker_lamp_1 | 2026-04-24 15:57:44,655 INFO spawned: 'worker_00' with pid 23776\ndocker_lamp_1 | 2026-04-24 15:57:44,663 INFO success: worker-es-update_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)\ndocker_lamp_1 | 2026-04-24 15:57:45,668 INFO success: worker_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)\ndocker_lamp_1 | \ndocker_lamp_1 | RedisException \ndocker_lamp_1 | \ndocker_lamp_1 | LOADING Redis is loading the dataset in memory\ndocker_lamp_1 | \ndocker_lamp_1 | at vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:119\ndocker_lamp_1 | 115▕ {\ndocker_lamp_1 | 116▕ $start = microtime(true);\ndocker_lamp_1 | 117▕ \ndocker_lamp_1 | 118▕ try {\ndocker_lamp_1 | ➜ 119▕ $result = $this->client->{$method}(...$parameters);\ndocker_lamp_1 | 120▕ } catch (Throwable $e) {\ndocker_lamp_1 | 121▕ $this->events?->dispatch(new CommandFailed(\ndocker_lamp_1 | 122▕ $method, $this->parseParametersForEvent($parameters), $e, $this\ndocker_lamp_1 | 123▕ ));\ndocker_lamp_1 | \ndocker_lamp_1 | +22 vendor frames \ndocker_lamp_1 | \ndocker_lamp_1 | 23 artisan:13\ndocker_lamp_1 | Illuminate\\Foundation\\Application::handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))\ndocker_lamp_1 | \ndocker_lamp_1 | 2026-04-24 15:57:48,915 WARN exited: worker-conferences_00 (exit status 1; not expected)\ndocker_lamp_1 | 2026-04-24 15:57:49,947 INFO spawned: 'worker-conferences_00' with pid 23786\ndocker_lamp_1 | 2026-04-24 15:57:50,951 INFO success: worker-conferences_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)\ndocker_lamp_1 | \ndocker_lamp_1 | RedisException \ndocker_lamp_1 | \ndocker_lamp_1 | LOADING Redis is loading the dataset in memory\ndocker_lamp_1 | \ndocker_lamp_1 | at vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:119\ndocker_lamp_1 | 115▕ {\ndocker_lamp_1 | 116▕ $start = microtime(true);\ndocker_lamp_1 | 117▕ \ndocker_lamp_1 | 118▕ try {\ndocker_lamp_1 | ➜ 119▕ $result = $this->client->{$method}(...$parameters);\ndocker_lamp_1 | 120▕ } catch (Throwable $e) {\ndocker_lamp_1 | 121▕ $this->events?->dispatch(new CommandFailed(\ndocker_lamp_1 | 122▕ $method, $this->parseParametersForEvent($parameters), $e, $this\ndocker_lamp_1 | 123▕ ));\ndocker_lamp_1 | \ndocker_lamp_1 | +22 vendor frames \ndocker_lamp_1 | \ndocker_lamp_1 | 23 artisan:13\ndocker_lamp_1 | Illuminate\\Foundation\\Application::handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))\ndocker_lamp_1 | \ndocker_lamp_1 | 2026-04-24 15:57:56,798 WARN exited: worker-calendar_00 (exit status 1; not expected)\ndocker_lamp_1 | 2026-04-24 15:57:57,826 INFO spawned: 'worker-calendar_00' with pid 23803\ndocker_lamp_1 | 2026-04-24 15:57:58,832 INFO success: worker-calendar_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)\n\n\nv View in Docker Desktop o View Config w Enable Watch","depth":4,"value":"Last login: Fri Apr 24 11:52:17 on ttys011\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/infrastructure/dev/docker or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/infrastructure/dev/docker or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/infrastructure/dev/docker (develop) $ work\nWARN[0000] /Users/lukas/jiminny/infrastructure/dev/docker/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion \n[+] Running 1/1\n ✔ Container docker_lamp_1 Running 0.0s \nAttaching to blackfire-1, datadog-1, jiminny_ext-1, mariadb-1, docker_lamp_1, elasticsearch, kibana, ngrok, redis\ndocker_lamp_1 | 2026-04-24 15:57:06,990 INFO spawned: 'worker-audio_00' with pid 23688\ndocker_lamp_1 | 2026-04-24 15:57:08,013 INFO success: worker-audio_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)\nblackfire-1 | [2026-04-24T15:57:12Z] ERROR: The server ID parameter is not set. Please run 'blackfire-agent -register' to configure it.\nblackfire-1 | usage blackfire-agent [options]\nblackfire-1 | --collector=\"https://blackfire.io\": Sets the URL of Blackfire's data collector\nblackfire-1 | --config=\"/etc/blackfire/agent\": Sets the path to the configuration file\nblackfire-1 | -d: Prints the current configuration\nblackfire-1 | --http-proxy=\"\": Sets the HTTP proxy to use\nblackfire-1 | --https-proxy=\"\": Sets the HTTPS proxy to use\nblackfire-1 | --log-file=\"stderr\": Sets the path of the log file. Use stderr to log to stderr\nblackfire-1 | --log-level=\"1\": log verbosity level (4: debug, 3: info, 2: warning, 1: error)\nblackfire-1 | --register: Helps you with registering the agent\nblackfire-1 | --server-id=\"\": Sets the server id used to authenticate with Blackfire API\nblackfire-1 | --server-token=\"\": Sets the server token used to authenticate with Blackfire API. It is unsafe to set this from the command line\nblackfire-1 | --socket=\"unix:///var/run/blackfire/agent.sock\": Sets the socket the agent should read traces from. Possible value can be a unix socket or a TCP address. ie: unix:///var/run/blackfire/agent.sock or tcp://127.0.0.1:8307\nblackfire-1 | --test: Tests the configuration\nblackfire-1 | --timeout=\"15s\": Sets the Blackfire connection timeout\nblackfire-1 | -v: Prints the version number\nmariadb-1 | 2026-04-24 15:57:12+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:11.4.5+maria~ubu2404 started.\nredis | 1:C 24 Apr 2026 15:57:13.290 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo\nredis | 1:C 24 Apr 2026 15:57:13.292 # Redis version=5.0.14, bits=64, commit=00000000, modified=0, pid=1, just started\nredis | 1:C 24 Apr 2026 15:57:13.292 # Configuration loaded\nredis | 1:M 24 Apr 2026 15:57:13.334 * Running mode=standalone, port=6379.\nredis | 1:M 24 Apr 2026 15:57:13.334 # Server initialized\nredis | 1:M 24 Apr 2026 15:57:13.334 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.\nredis | 1:M 24 Apr 2026 15:57:13.349 * Reading RDB preamble from AOF file...\nredis | 1:M 24 Apr 2026 15:57:13.351 * Reading the remaining AOF tail...\nngrok | t=2026-04-24T15:57:13+0000 lvl=info msg=\"no configuration paths supplied\"\nngrok | t=2026-04-24T15:57:13+0000 lvl=info msg=\"using configuration at default config path\" path=/home/ngrok/.ngrok2/ngrok.yml\nngrok | t=2026-04-24T15:57:13+0000 lvl=info msg=\"open config file\" path=/home/ngrok/.ngrok2/ngrok.yml err=nil\nngrok | t=2026-04-24T15:57:14+0000 lvl=info msg=\"starting web service\" obj=web addr=0.0.0.0:4040\nblackfire-1 exited with code 1\nngrok | t=2026-04-24T15:57:15+0000 lvl=info msg=\"tunnel session started\" obj=tunnels.session\nngrok | t=2026-04-24T15:57:15+0000 lvl=info msg=\"client session established\" obj=csess id=56b3c75875b2\nngrok | t=2026-04-24T15:57:16+0000 lvl=info msg=\"started tunnel\" obj=tunnels name=\"command_line (http)\" addr=http://lamp:3080 url=http://lukask.ngrok.io\nngrok | t=2026-04-24T15:57:16+0000 lvl=info msg=\"started tunnel\" obj=tunnels name=command_line addr=http://lamp:3080 url=https://lukask.ngrok.io\njiminny_ext-1 exited with code 0\ndatadog-1 | [s6-init] making user provided files available at /var/run/s6/etc...exited 0.\nngrok | t=2026-04-24T15:57:19+0000 lvl=warn msg=\"failed to check for update\" obj=updater err=\"Post \\\"https://update.equinox.io/check\\\": context deadline exceeded\"\nmariadb-1 | 2026-04-24 15:57:21+00:00 [Warn] [Entrypoint]: /sys/fs/cgroup///memory.pressure not writable, functionality unavailable to MariaDB\nmariadb-1 | 2026-04-24 15:57:21+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'\nmariadb-1 | 2026-04-24 15:57:22+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:11.4.5+maria~ubu2404 started.\ndatadog-1 | [s6-init] ensuring user provided files have correct perms...exited 0.\ndatadog-1 | [fix-attrs.d] applying ownership & permissions fixes...\ndatadog-1 | [fix-attrs.d] done.\ndatadog-1 | [cont-init.d] executing container initialization scripts...\ndatadog-1 | [cont-init.d] 01-check-apikey.sh: executing... \nmariadb-1 | 2026-04-24 15:57:26+00:00 [Note] [Entrypoint]: MariaDB upgrade information missing, assuming required\nmariadb-1 | 2026-04-24 15:57:26+00:00 [Note] [Entrypoint]: MariaDB upgrade (mariadb-upgrade or creating healthcheck users) required, but skipped due to $MARIADB_AUTO_UPGRADE setting\ndatadog-1 | \ndatadog-1 | ==================================================================================\ndatadog-1 | You must set an DD_API_KEY environment variable to run the Datadog Agent container\ndatadog-1 | ==================================================================================\ndatadog-1 | \ndatadog-1 | [cont-init.d] 01-check-apikey.sh: exited 1.\nmariadb-1 | 2026-04-24 15:57:27 0 [Note] Starting MariaDB 11.4.5-MariaDB-ubu2404 source revision 0771110266ff5c04216af4bf1243c65f8c67ccf4 server_uid 4vwyAM0Bugoxc+dNtHbhP3Kqz+Q= as process 1\nmariadb-1 | 2026-04-24 15:57:28 0 [Note] InnoDB: Compressed tables use zlib 1.3\nmariadb-1 | 2026-04-24 15:57:28 0 [Note] InnoDB: Number of transaction pools: 1\nmariadb-1 | 2026-04-24 15:57:28 0 [Note] InnoDB: Using ARMv8 crc32 + pmull instructions\nmariadb-1 | 2026-04-24 15:57:28 0 [Note] InnoDB: Using liburing\nmariadb-1 | 2026-04-24 15:57:28 0 [Note] InnoDB: Initializing buffer pool, total size = 128.000MiB, chunk size = 2.000MiB\nmariadb-1 | 2026-04-24 15:57:28 0 [Note] InnoDB: Completed initialization of buffer pool\nmariadb-1 | 2026-04-24 15:57:28 0 [Note] InnoDB: File system buffers for log disabled (block size=512 bytes)\nmariadb-1 | 2026-04-24 15:57:29 0 [Note] InnoDB: End of log at LSN=7620292277\nmariadb-1 | 2026-04-24 15:57:30 0 [Note] InnoDB: Opened 3 undo tablespaces\nmariadb-1 | 2026-04-24 15:57:30 0 [Note] InnoDB: 128 rollback segments in 3 undo tablespaces are active.\ndatadog-1 exited with code 1\nmariadb-1 | 2026-04-24 15:57:30 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically writing the file full; Please wait ...\nmariadb-1 | 2026-04-24 15:57:30 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.\nmariadb-1 | 2026-04-24 15:57:30 0 [Note] InnoDB: log sequence number 7620292277; transaction id 11495688\nmariadb-1 | 2026-04-24 15:57:30 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool\nmariadb-1 | 2026-04-24 15:57:31 0 [Note] Plugin 'FEEDBACK' is disabled.\nmariadb-1 | 2026-04-24 15:57:31 0 [Note] Plugin 'wsrep-provider' is disabled.\nmariadb-1 | 2026-04-24 15:57:34 0 [Note] InnoDB: Buffer pool(s) load completed at 260424 15:57:34\nmariadb-1 | 2026-04-24 15:57:40 0 [Note] Server socket created on IP: '0.0.0.0'.\nmariadb-1 | 2026-04-24 15:57:40 0 [Note] Server socket created on IP: '::'.\nmariadb-1 | 2026-04-24 15:57:41 0 [Note] mariadbd: Event Scheduler: Loaded 0 events\nmariadb-1 | 2026-04-24 15:57:41 0 [Note] mariadbd: ready for connections.\nmariadb-1 | Version: '11.4.5-MariaDB-ubu2404' socket: '/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution\ndocker_lamp_1 | \ndocker_lamp_1 | RedisException \ndocker_lamp_1 | \ndocker_lamp_1 | LOADING Redis is loading the dataset in memory\ndocker_lamp_1 | \ndocker_lamp_1 | at vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:119\ndocker_lamp_1 | \ndocker_lamp_1 | RedisException \ndocker_lamp_1 | \ndocker_lamp_1 | LOADING Redis is loading the dataset in memory\ndocker_lamp_1 | \ndocker_lamp_1 | at vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:119\ndocker_lamp_1 | 115▕ {\ndocker_lamp_1 | 116▕ $start = microtime(true);\ndocker_lamp_1 | 117▕ \ndocker_lamp_1 | 118▕ try {\ndocker_lamp_1 | ➜ 119▕ $result = $this->client->{$method}(...$parameters);\ndocker_lamp_1 | 120▕ } catch (Throwable $e) {\ndocker_lamp_1 | 121▕ $this->events?->dispatch(new CommandFailed(\ndocker_lamp_1 | 122▕ $method, $this->parseParametersForEvent($parameters), $e, $this\ndocker_lamp_1 | 123▕ ));\ndocker_lamp_1 | \ndocker_lamp_1 | +5 vendor frames \ndocker_lamp_1 | \ndocker_lamp_1 | 6 app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php:93\ndocker_lamp_1 | Illuminate\\Support\\Facades\\Facade::__callStatic(\"get\")\ndocker_lamp_1 | \ndocker_lamp_1 | 7 app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php:49\ndocker_lamp_1 | Jiminny\\Console\\Commands\\Elasticsearch\\AsyncUpdateEsEntities::logListSize(\"activities\")\ndocker_lamp_1 | \ndocker_lamp_1 | 115▕ {\ndocker_lamp_1 | 116▕ $start = microtime(true);\ndocker_lamp_1 | 117▕ \ndocker_lamp_1 | 118▕ try {\ndocker_lamp_1 | ➜ 119▕ $result = $this->client->{$method}(...$parameters);\ndocker_lamp_1 | 120▕ } catch (Throwable $e) {\ndocker_lamp_1 | 121▕ $this->events?->dispatch(new CommandFailed(\ndocker_lamp_1 | 122▕ $method, $this->parseParametersForEvent($parameters), $e, $this\ndocker_lamp_1 | 123▕ ));\ndocker_lamp_1 | \ndocker_lamp_1 | +22 vendor frames \ndocker_lamp_1 | \ndocker_lamp_1 | 23 artisan:13\ndocker_lamp_1 | Illuminate\\Foundation\\Application::handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))\ndocker_lamp_1 | \ndocker_lamp_1 | 2026-04-24 15:57:43,598 WARN exited: worker-es-update_00 (exit status 1; not expected)\ndocker_lamp_1 | 2026-04-24 15:57:43,617 INFO spawned: 'worker-es-update_00' with pid 23773\ndocker_lamp_1 | 2026-04-24 15:57:43,633 WARN exited: worker_00 (exit status 1; not expected)\ndocker_lamp_1 | 2026-04-24 15:57:44,655 INFO spawned: 'worker_00' with pid 23776\ndocker_lamp_1 | 2026-04-24 15:57:44,663 INFO success: worker-es-update_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)\ndocker_lamp_1 | 2026-04-24 15:57:45,668 INFO success: worker_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)\ndocker_lamp_1 | \ndocker_lamp_1 | RedisException \ndocker_lamp_1 | \ndocker_lamp_1 | LOADING Redis is loading the dataset in memory\ndocker_lamp_1 | \ndocker_lamp_1 | at vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:119\ndocker_lamp_1 | 115▕ {\ndocker_lamp_1 | 116▕ $start = microtime(true);\ndocker_lamp_1 | 117▕ \ndocker_lamp_1 | 118▕ try {\ndocker_lamp_1 | ➜ 119▕ $result = $this->client->{$method}(...$parameters);\ndocker_lamp_1 | 120▕ } catch (Throwable $e) {\ndocker_lamp_1 | 121▕ $this->events?->dispatch(new CommandFailed(\ndocker_lamp_1 | 122▕ $method, $this->parseParametersForEvent($parameters), $e, $this\ndocker_lamp_1 | 123▕ ));\ndocker_lamp_1 | \ndocker_lamp_1 | +22 vendor frames \ndocker_lamp_1 | \ndocker_lamp_1 | 23 artisan:13\ndocker_lamp_1 | Illuminate\\Foundation\\Application::handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))\ndocker_lamp_1 | \ndocker_lamp_1 | 2026-04-24 15:57:48,915 WARN exited: worker-conferences_00 (exit status 1; not expected)\ndocker_lamp_1 | 2026-04-24 15:57:49,947 INFO spawned: 'worker-conferences_00' with pid 23786\ndocker_lamp_1 | 2026-04-24 15:57:50,951 INFO success: worker-conferences_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)\ndocker_lamp_1 | \ndocker_lamp_1 | RedisException \ndocker_lamp_1 | \ndocker_lamp_1 | LOADING Redis is loading the dataset in memory\ndocker_lamp_1 | \ndocker_lamp_1 | at vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:119\ndocker_lamp_1 | 115▕ {\ndocker_lamp_1 | 116▕ $start = microtime(true);\ndocker_lamp_1 | 117▕ \ndocker_lamp_1 | 118▕ try {\ndocker_lamp_1 | ➜ 119▕ $result = $this->client->{$method}(...$parameters);\ndocker_lamp_1 | 120▕ } catch (Throwable $e) {\ndocker_lamp_1 | 121▕ $this->events?->dispatch(new CommandFailed(\ndocker_lamp_1 | 122▕ $method, $this->parseParametersForEvent($parameters), $e, $this\ndocker_lamp_1 | 123▕ ));\ndocker_lamp_1 | \ndocker_lamp_1 | +22 vendor frames \ndocker_lamp_1 | \ndocker_lamp_1 | 23 artisan:13\ndocker_lamp_1 | Illuminate\\Foundation\\Application::handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))\ndocker_lamp_1 | \ndocker_lamp_1 | 2026-04-24 15:57:56,798 WARN exited: worker-calendar_00 (exit status 1; not expected)\ndocker_lamp_1 | 2026-04-24 15:57:57,826 INFO spawned: 'worker-calendar_00' with pid 23803\ndocker_lamp_1 | 2026-04-24 15:57:58,832 INFO success: worker-calendar_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)\n\n\nv View in Docker Desktop o View Config w Enable Watch","is_focused":true},{"role":"AXButton","text":"Menu","depth":3,"bounds":{"left":0.50299203,"top":1.0,"width":0.004986702,"height":-0.06424582},"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"⌥1 DOCKER (docker-compose)","depth":3,"bounds":{"left":0.27925533,"top":1.0,"width":0.22207446,"height":-0.06464481},"role_description":"text"},{"role":"AXTextArea","text":"Last login: Fri Apr 24 11:52:17 on ttys011\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 ~ $","depth":5,"bounds":{"left":0.5103058,"top":1.0,"width":0.2400266,"height":-0.08060658},"value":"Last login: Fri Apr 24 11:52:17 on ttys011\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 ~ $","is_focused":true},{"role":"AXButton","text":"Menu","depth":4,"bounds":{"left":0.74335104,"top":1.0,"width":0.004986702,"height":-0.06424582},"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"⌥2 PROD (-zsh)","depth":4,"bounds":{"left":0.5192819,"top":1.0,"width":0.22240691,"height":-0.06464481},"role_description":"text"},{"role":"AXTextArea","text":"Last login: Fri Apr 24 11:52:17 on ttys011\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 ~ $","depth":5,"value":"Last login: Fri Apr 24 11:52:17 on ttys011\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 ~ $","is_focused":true},{"role":"AXButton","text":"Menu","depth":4,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"⌥3 EU (-zsh)","depth":4,"role_description":"text"},{"role":"AXTextArea","text":"Last login: Fri Apr 24 11:52:17 on ttys011\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 ~ $","depth":5,"value":"Last login: Fri Apr 24 11:52:17 on ttys011\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 ~ $","is_focused":true},{"role":"AXButton","text":"Menu","depth":4,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"⌥4 STAGE (-zsh)","depth":4,"role_description":"text"},{"role":"AXTextArea","text":"Last login: Fri Apr 24 11:52:17 on ttys011\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 ~ $","depth":5,"value":"Last login: Fri Apr 24 11:52:17 on ttys011\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 ~ $","is_focused":true},{"role":"AXButton","text":"Menu","depth":4,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"⌥5 QA (-zsh)","depth":4,"role_description":"text"},{"role":"AXTextArea","text":"Last login: Fri Apr 24 11:52:17 on ttys011\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 ~ $","depth":5,"value":"Last login: Fri Apr 24 11:52:17 on ttys011\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 ~ $","is_focused":true},{"role":"AXButton","text":"Menu","depth":4,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"⌥6 FE (-zsh)","depth":4,"role_description":"text"},{"role":"AXTextArea","text":"Last login: Fri Apr 24 11:52:17 on ttys011\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 ~ $","depth":5,"value":"Last login: Fri Apr 24 11:52:17 on ttys011\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 ~ $","is_focused":true},{"role":"AXButton","text":"Menu","depth":4,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"⌥7 EXT (-zsh)","depth":4,"role_description":"text"},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.0944149,"height":-0.042298436},"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},"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},"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},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (docker)","depth":2,"bounds":{"left":0.45910904,"top":1.0,"width":0.0944149,"height":-0.042298436},"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},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.55352396,"top":1.0,"width":0.0944149,"height":-0.042298436},"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},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.64793885,"top":1.0,"width":0.0944149,"height":-0.042298436},"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},"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},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"DOCKER (docker-compose)","depth":1,"bounds":{"left":0.47972074,"top":1.0,"width":0.060837764,"height":-0.02394259},"role_description":"text"}]...
|
8825237642745231886
|
8468911964581544520
|
idle
|
accessibility
|
NULL
|
Last login: Fri Apr 24 11:52:17 on ttys011
Poetry Last login: Fri Apr 24 11:52:17 on ttys011
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/infrastructure/dev/docker or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/infrastructure/dev/docker or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/infrastructure/dev/docker (develop) $ work
WARN[0000] /Users/lukas/jiminny/infrastructure/dev/docker/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 1/1
✔ Container docker_lamp_1 Running 0.0s
Attaching to blackfire-1, datadog-1, jiminny_ext-1, mariadb-1, docker_lamp_1, elasticsearch, kibana, ngrok, redis
docker_lamp_1 | 2026-04-24 15:57:06,990 INFO spawned: 'worker-audio_00' with pid 23688
docker_lamp_1 | 2026-04-24 15:57:08,013 INFO success: worker-audio_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
blackfire-1 | [2026-04-24T15:57:12Z] ERROR: The server ID parameter is not set. Please run 'blackfire-agent -register' to configure it.
blackfire-1 | usage blackfire-agent [options]
blackfire-1 | --collector="[URL_WITH_CREDENTIALS] ~ $
Menu
⌥2 PROD (-zsh)
Last login: Fri Apr 24 11:52:17 on ttys011
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 ~ $
Menu
⌥3 EU (-zsh)
Last login: Fri Apr 24 11:52:17 on ttys011
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 ~ $
Menu
⌥4 STAGE (-zsh)
Last login: Fri Apr 24 11:52:17 on ttys011
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 ~ $
Menu
⌥5 QA (-zsh)
Last login: Fri Apr 24 11:52:17 on ttys011
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 ~ $
Menu
⌥6 FE (-zsh)
Last login: Fri Apr 24 11:52:17 on ttys011
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 ~ $
Menu
⌥7 EXT (-zsh)
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (docker)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
⌥⌘1
DOCKER (docker-compose)...
|
NULL
|
|
32427
|
659
|
11
|
2026-04-16T07:06:27.691687+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776323187691_m2.jpg...
|
Firefox
|
SQLite Web: db.sqlite — Personal
|
True
|
http://100.73.206.126:8767/frames/query/
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
Steam Account Verification - [EMA DXP4800PLUS-B5F8
Steam Account Verification - [EMAIL] - Gmail
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 238,97 € (467,38 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 238,97 € (467,38 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
| Senetic
| Senetic
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Close tab
Screenpipe Dashboard
Screenpipe Dashboard
Welcome to Steam
Welcome to Steam
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Google Account: Lukáš Koválik ([EMAIL])
Main menu
New chat
Share conversation
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said screenpipe cli. data fr day gathered in screenpipe/data/data/{date} folder are jpg and mp4 files. THere are only few jpgs that are recent and mp4 for the whole day. How doe sit work. What is the flow with the jpgs to mp4
You said
screenpipe cli. data fr day gathered in screenpipe/data/data/{date} folder are jpg and mp4 files. THere are only few jpgs that are recent and mp4 for the whole day. How doe sit work. What is the flow with the jpgs to mp4
Expand
Listen
Show more options
Show thinking
Gemini said
Gemini said
What you are seeing in the
screenpipe/data/data/{date}
folder is the system's way of balancing quick data processing with long-term storage efficiency. You have essentially stumbled upon Screenpipe's "active buffer."
Here is the exact flow of how those files are managed:
The JPG to MP4 Pipeline
The JPG to MP4 Pipeline
Continuous Capture & Active Buffering (The JPGs):
As Screenpipe records your screen, it needs to process the visuals immediately to extract text (OCR) and make it searchable. It is much faster and easier for the system to run OCR on raw, individual image frames than to scrub through a compressed video. Therefore, it captures your current screen as individual
JPG files
. These recent JPGs act as a temporary active buffer.
Video Encoding (The Transition):
Storing thousands of raw JPGs for a 24/7 recording would consume a massive amount of disk space. To prevent this, Screenpipe periodically takes batches of these temporary JPGs and uses an internal encoder (like FFmpeg) to stitch and compress them into an
H.265 MP4 video chunk
.
Database Linking & Cleanup:
Once the MP4 video chunk is successfully generated, Screenpipe maps the timestamps in its local SQLite database to the exact frames inside that new video. Finally, it acts as a garbage collector—deleting the original batch of JPGs to free up disk space.
The Result:
This is why you see MP4s representing the historical bulk of your day, and only a handful of recent JPGs representing the very latest moments that haven't been packaged into a video chunk yet.
Important Note on Screenpipe's Architecture
Important Note on Screenpipe's Architecture
Depending on the exact version you are running, you might see this behavior change in the future.
In the newest versions of Screenpipe, the developers have been shifting the architecture from "continuous video recording" to
"event-driven capture."
Instead of recording a constant MP4 stream, the system listens for meaningful OS events (like app switches, clicks, or scrolling) and only takes a single JPG snapshot when something actually changes.
View source details for citation from GitHub. Opens side panel....
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.00234375,"top":0.045138888,"width":0.064453125,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Steam Account Verification - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.06679688,"top":0.045138888,"width":0.06484375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 238,97 € (467,38 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.0,"top":0.08263889,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 238,97 € (467,38 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.015625,"top":0.09236111,"width":0.309375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"| Senetic","depth":4,"bounds":{"left":0.0,"top":0.11111111,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"| Senetic","depth":5,"bounds":{"left":0.015625,"top":0.12083333,"width":0.017578125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Твърд диск, Western Digital Red 6TB Plus ( 3.5\", 256MB, 5400","depth":4,"bounds":{"left":0.0,"top":0.13958333,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Твърд диск, Western Digital Red 6TB Plus ( 3.5\", 256MB, 5400","depth":5,"bounds":{"left":0.015625,"top":0.14930555,"width":0.12929687,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.0,"top":0.16805555,"width":0.13359375,"height":0.028472222},"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.015625,"top":0.17777778,"width":0.044140626,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.119140625,"top":0.17430556,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Screenpipe Dashboard","depth":4,"bounds":{"left":0.0,"top":0.19652778,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe Dashboard","depth":5,"bounds":{"left":0.015625,"top":0.20625,"width":0.046484374,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Welcome to Steam","depth":4,"bounds":{"left":0.0,"top":0.225,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome to Steam","depth":5,"bounds":{"left":0.015625,"top":0.23472223,"width":0.03828125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.003125,"top":0.25486112,"width":0.12734374,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.003125,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.01640625,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.029296875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0421875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.05546875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"bounds":{"left":0.25703126,"top":0.047916666,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"bounds":{"left":0.27109376,"top":0.047916666,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Google Account: Lukáš Koválik (kovaliklukas@gmail.com)","depth":12,"bounds":{"left":0.26796874,"top":0.090277776,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"bounds":{"left":0.13828126,"top":0.090277776,"width":0.015625,"height":0.027777778},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"bounds":{"left":0.21953125,"top":0.090277776,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share conversation","depth":11,"bounds":{"left":0.23515625,"top":0.090277776,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"bounds":{"left":0.25078124,"top":0.090277776,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"bounds":{"left":0.13320312,"top":0.12847222,"width":0.000390625,"height":0.00069444446},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.13320312,"top":0.13055556,"width":0.14101562,"height":0.022222223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said screenpipe cli. data fr day gathered in screenpipe/data/data/{date} folder are jpg and mp4 files. THere are only few jpgs that are recent and mp4 for the whole day. How doe sit work. What is the flow with the jpgs to mp4","depth":21,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"screenpipe cli. data fr day gathered in screenpipe/data/data/{date} folder are jpg and mp4 files. THere are only few jpgs that are recent and mp4 for the whole day. How doe sit work. What is the flow with the jpgs to mp4","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":23,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":23,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"What you are seeing in the","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"screenpipe/data/data/{date}","depth":28,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"folder is the system's way of balancing quick data processing with long-term storage efficiency. You have essentially stumbled upon Screenpipe's \"active buffer.\"","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is the exact flow of how those files are managed:","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"The JPG to MP4 Pipeline","depth":26,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The JPG to MP4 Pipeline","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Continuous Capture & Active Buffering (The JPGs):","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"As Screenpipe records your screen, it needs to process the visuals immediately to extract text (OCR) and make it searchable. It is much faster and easier for the system to run OCR on raw, individual image frames than to scrub through a compressed video. Therefore, it captures your current screen as individual","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JPG files","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". These recent JPGs act as a temporary active buffer.","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Video Encoding (The Transition):","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Storing thousands of raw JPGs for a 24/7 recording would consume a massive amount of disk space. To prevent this, Screenpipe periodically takes batches of these temporary JPGs and uses an internal encoder (like FFmpeg) to stitch and compress them into an","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"H.265 MP4 video chunk","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Database Linking & Cleanup:","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Once the MP4 video chunk is successfully generated, Screenpipe maps the timestamps in its local SQLite database to the exact frames inside that new video. Finally, it acts as a garbage collector—deleting the original batch of JPGs to free up disk space.","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Result:","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This is why you see MP4s representing the historical bulk of your day, and only a handful of recent JPGs representing the very latest moments that haven't been packaged into a video chunk yet.","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Important Note on Screenpipe's Architecture","depth":26,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Important Note on Screenpipe's Architecture","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Depending on the exact version you are running, you might see this behavior change in the future.","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In the newest versions of Screenpipe, the developers have been shifting the architecture from \"continuous video recording\" to","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"event-driven capture.\"","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instead of recording a constant MP4 stream, the system listens for meaningful OS events (like app switches, clicks, or scrolling) and only takes a single JPG snapshot when something actually changes.","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"View source details for citation from GitHub. Opens side panel.","depth":27,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
8824643374434799273
|
-1946394122984666978
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
Steam Account Verification - [EMA DXP4800PLUS-B5F8
Steam Account Verification - [EMAIL] - Gmail
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 238,97 € (467,38 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 238,97 € (467,38 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
| Senetic
| Senetic
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Close tab
Screenpipe Dashboard
Screenpipe Dashboard
Welcome to Steam
Welcome to Steam
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Google Account: Lukáš Koválik ([EMAIL])
Main menu
New chat
Share conversation
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said screenpipe cli. data fr day gathered in screenpipe/data/data/{date} folder are jpg and mp4 files. THere are only few jpgs that are recent and mp4 for the whole day. How doe sit work. What is the flow with the jpgs to mp4
You said
screenpipe cli. data fr day gathered in screenpipe/data/data/{date} folder are jpg and mp4 files. THere are only few jpgs that are recent and mp4 for the whole day. How doe sit work. What is the flow with the jpgs to mp4
Expand
Listen
Show more options
Show thinking
Gemini said
Gemini said
What you are seeing in the
screenpipe/data/data/{date}
folder is the system's way of balancing quick data processing with long-term storage efficiency. You have essentially stumbled upon Screenpipe's "active buffer."
Here is the exact flow of how those files are managed:
The JPG to MP4 Pipeline
The JPG to MP4 Pipeline
Continuous Capture & Active Buffering (The JPGs):
As Screenpipe records your screen, it needs to process the visuals immediately to extract text (OCR) and make it searchable. It is much faster and easier for the system to run OCR on raw, individual image frames than to scrub through a compressed video. Therefore, it captures your current screen as individual
JPG files
. These recent JPGs act as a temporary active buffer.
Video Encoding (The Transition):
Storing thousands of raw JPGs for a 24/7 recording would consume a massive amount of disk space. To prevent this, Screenpipe periodically takes batches of these temporary JPGs and uses an internal encoder (like FFmpeg) to stitch and compress them into an
H.265 MP4 video chunk
.
Database Linking & Cleanup:
Once the MP4 video chunk is successfully generated, Screenpipe maps the timestamps in its local SQLite database to the exact frames inside that new video. Finally, it acts as a garbage collector—deleting the original batch of JPGs to free up disk space.
The Result:
This is why you see MP4s representing the historical bulk of your day, and only a handful of recent JPGs representing the very latest moments that haven't been packaged into a video chunk yet.
Important Note on Screenpipe's Architecture
Important Note on Screenpipe's Architecture
Depending on the exact version you are running, you might see this behavior change in the future.
In the newest versions of Screenpipe, the developers have been shifting the architecture from "continuous video recording" to
"event-driven capture."
Instead of recording a constant MP4 stream, the system listens for meaningful OS events (like app switches, clicks, or scrolling) and only takes a single JPG snapshot when something actually changes.
View source details for citation from GitHub. Opens side panel....
|
32426
|
|
39326
|
798
|
47
|
2026-04-16T13:35:46.688199+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776346546688_m1.jpg...
|
Boosteroid
|
Boosteroid
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp100% <478Thu 16 Apr 16:35:46-zshDOCKER881Last login: Thu Apr 16 15:48:11 on ttys009DEV (-zsh)882APP (-zsh)*3-zsh• *4-zsh85Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~S sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%" OR window_name LIKE "%Boostroid%"ORDER BY created_at DESC LIMIT 20;"Error: in prepare, no such column:created_atari%' OR window_name LIKE "%Boosteroid%'ORDER BY created_at DESC LIMIT 20;error here---^lukas@Lukas-Kovaliks-MacBook-Pro-Jiminnyroid%'~§ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%BoostORDER BYcreated_at DESC LIMIT 20;"Error: in prepare,no suchcolumn:created_atari%'OR window_name LIKE"%Boosteroid%'ORDER BY created_at DESC LIMIT 20;error herelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~S salite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE '%Boostroid%'ORDER BYcreated_at DESC LIMIT 20;"Error: in prepare,nosuch column:created_atari%'OR window_name LIKE "%Boosteroid%'ORDER BY created_at DESC LIMIT 20;error here---Alukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE '%Boostroid%'ORDER BY timestamp DESC LIMIT 20;"Error: in prepare, no such column: timestampari%' OR window_name LIKE "XBoosteroid%' ORDER BY timestamp DESC LIMIT 20;error here__-лlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite ".schema ocr_text"CREATE TABLE IF NOTEXISTS "ocr_text"frame_id INTEGER NOT NULL,text TEXT NOT NULL,text_json TEXT,app_name TEXT NOT NULL DEFAULTocr_engine TEXT NOT NULL DEFAULT'unknown'window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);CREATE INDEX idx_ocr_text_sync_id ONocr_text(sync_id) WHERE sync_id IS NOT NULL;Lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~ S salite3 ~/.screenpipe/db.sqlite "SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIK'%Boosteroid%'LIMIT 20;"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ D...
|
NULL
|
8824579739606402808
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp100% <478Thu 16 Apr 16:35:46-zshDOCKER881Last login: Thu Apr 16 15:48:11 on ttys009DEV (-zsh)882APP (-zsh)*3-zsh• *4-zsh85Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~S sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%" OR window_name LIKE "%Boostroid%"ORDER BY created_at DESC LIMIT 20;"Error: in prepare, no such column:created_atari%' OR window_name LIKE "%Boosteroid%'ORDER BY created_at DESC LIMIT 20;error here---^lukas@Lukas-Kovaliks-MacBook-Pro-Jiminnyroid%'~§ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%BoostORDER BYcreated_at DESC LIMIT 20;"Error: in prepare,no suchcolumn:created_atari%'OR window_name LIKE"%Boosteroid%'ORDER BY created_at DESC LIMIT 20;error herelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~S salite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE '%Boostroid%'ORDER BYcreated_at DESC LIMIT 20;"Error: in prepare,nosuch column:created_atari%'OR window_name LIKE "%Boosteroid%'ORDER BY created_at DESC LIMIT 20;error here---Alukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE '%Boostroid%'ORDER BY timestamp DESC LIMIT 20;"Error: in prepare, no such column: timestampari%' OR window_name LIKE "XBoosteroid%' ORDER BY timestamp DESC LIMIT 20;error here__-лlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite ".schema ocr_text"CREATE TABLE IF NOTEXISTS "ocr_text"frame_id INTEGER NOT NULL,text TEXT NOT NULL,text_json TEXT,app_name TEXT NOT NULL DEFAULTocr_engine TEXT NOT NULL DEFAULT'unknown'window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);CREATE INDEX idx_ocr_text_sync_id ONocr_text(sync_id) WHERE sync_id IS NOT NULL;Lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~ S salite3 ~/.screenpipe/db.sqlite "SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIK'%Boosteroid%'LIMIT 20;"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ D...
|
39324
|
|
58867
|
1264
|
16
|
2026-04-20T13:06:34.678228+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776690394678_m1.jpg...
|
PhpStorm
|
PhpStorm
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelpmeet.google.com/cxs-eips-npt?authuser=0Nikolay Nikolov (Presenting, annotating)100% K478• Mon 20 Apr 16:06:3400 8iestorisDC• а 8+Mon 20 Apr 16:06U SyncHubspotObjectsTest.testHandlSyncedAt~Project vmportContactButch.php© ImportOpportunityBatch.phpCascade© SyncObjects. php 20.04.26, M4.16, 2.21k© SyncOpportunitiesMissingFielsDataC© SyncOpportunity php 23.03.26, 10:39.© SyncProfieMetadata.php 20.04.26, 14© SyncTeamMetadata. php 23.03.26, 10.1UpdateOpportunitySpecilfications.phgDealinsightsD DevSyncContact.phpSyncCrmÊntities Trait.phpService. phpSyncObjects. phpHubSpot Webhook Di+0 -B4 -©LayoutUpdatedListener.phpSyncOpportunity.phpx© SyncAccount.phpWhere and how do we sync initial owner sync opportunitiesSyncProfieOpportunities.phpprecusponeserwoooOpportunitySyncTrait.phpne first syne CrM setup in 4.04s->syncOpportunitiesxPCW.class SyncOpportunity extends Connandprivate function syncOpportunitiesByDateCif (Sto) <SdataMessage .* ' to'• Sto:SopportunitySyncParaneters['to') = Sto;3/3T+7:XA1A32З А У18Bb Elusticsearch0 EngagementStatsED CeckoExpont› B Uvestream› 0 Mallboxes› E MigrateU SyncHubspotObjectsTest.testHandieWIthN...19ger: ProfiteCreatesSyncProftte0pportunities Euser connects to CRM - Profile created - ProfileCrested event1f (Sstrategy »* OpportunitySyncStrategyResolver::LAST_CREATED_SYNC_OSthis->info(string: 'Syncing opportunities created since • . SdataleSyncProfiteOpportunities:thandlel)F else KSthis->info( strng: 'Syncing opportunities nodified since * . SdatanSyncOpportunitiesJob dispatchedv J Taet Dasulte34mev 1 test passed 1 test total, 24 ms/opt/honebrew/Cellar/php/8.3.4/bin/phpTesting started at 11:54 ...PHPUnit 11.5.55 by Sebastian Bergnann •SyncProftledossHow it WorksAsk anything (XOL)stties,Sthis->conment( string: 'Synced" . Scount. ' opportunities.'):0.0syncOpportunitiesByDateDmands/..JSyncOpportunity.php 3 results>syncOpportunitlesByOate(5cr-Service, Strom, Sto, Sotfset);222 Scolunt • ScrmService»>syncOpportunities(SopportunitySyncParameters, Satrategyl:254 Scount « ScrmService-> syncOpportunities(SopportunitySyncParameters, Sstrategyl:› © SyncHlubspotActiveDeals.php 1 resultSyncOpportunitiesMissing/FieidDataCommand.php 1 resultapp/Console/Commands/Dealinsights 1 result0 app/3001/0rm 4 results~ D app/Listeners/Crm 1 result~©LayoutUpdatedListener.php 1 result70 Sthis-> tync Opportunities(Siayout):nds › Crm › © SyncOpportunity.php › ® SymcOpportunity › € •2string Scraid,21nt Soffset): vold (1f (Scraid) ‹F else 4зсаботзупетота моppоrик со востaservaсo, устадo, яиro, 3кos ponsuesSthis->syncOpportunitiesäyDate(ScraService, Sfron, Sto, Soffset):private function syncProfileOpportunities(nterface ScraService,1me04p00eoomb SnornToe vorcen254:43Symfony LF UTF-8 ( 4 spacesClick or hold page_up + page_down to start dictatingAneliya AngelovaStetka Stoyanova3 othersNikolay Nikolov4:06 PM | [Platform] RefinementLukas Kovalik1:04:46...
|
NULL
|
8824308917436902263
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelpmeet.google.com/cxs-eips-npt?authuser=0Nikolay Nikolov (Presenting, annotating)100% K478• Mon 20 Apr 16:06:3400 8iestorisDC• а 8+Mon 20 Apr 16:06U SyncHubspotObjectsTest.testHandlSyncedAt~Project vmportContactButch.php© ImportOpportunityBatch.phpCascade© SyncObjects. php 20.04.26, M4.16, 2.21k© SyncOpportunitiesMissingFielsDataC© SyncOpportunity php 23.03.26, 10:39.© SyncProfieMetadata.php 20.04.26, 14© SyncTeamMetadata. php 23.03.26, 10.1UpdateOpportunitySpecilfications.phgDealinsightsD DevSyncContact.phpSyncCrmÊntities Trait.phpService. phpSyncObjects. phpHubSpot Webhook Di+0 -B4 -©LayoutUpdatedListener.phpSyncOpportunity.phpx© SyncAccount.phpWhere and how do we sync initial owner sync opportunitiesSyncProfieOpportunities.phpprecusponeserwoooOpportunitySyncTrait.phpne first syne CrM setup in 4.04s->syncOpportunitiesxPCW.class SyncOpportunity extends Connandprivate function syncOpportunitiesByDateCif (Sto) <SdataMessage .* ' to'• Sto:SopportunitySyncParaneters['to') = Sto;3/3T+7:XA1A32З А У18Bb Elusticsearch0 EngagementStatsED CeckoExpont› B Uvestream› 0 Mallboxes› E MigrateU SyncHubspotObjectsTest.testHandieWIthN...19ger: ProfiteCreatesSyncProftte0pportunities Euser connects to CRM - Profile created - ProfileCrested event1f (Sstrategy »* OpportunitySyncStrategyResolver::LAST_CREATED_SYNC_OSthis->info(string: 'Syncing opportunities created since • . SdataleSyncProfiteOpportunities:thandlel)F else KSthis->info( strng: 'Syncing opportunities nodified since * . SdatanSyncOpportunitiesJob dispatchedv J Taet Dasulte34mev 1 test passed 1 test total, 24 ms/opt/honebrew/Cellar/php/8.3.4/bin/phpTesting started at 11:54 ...PHPUnit 11.5.55 by Sebastian Bergnann •SyncProftledossHow it WorksAsk anything (XOL)stties,Sthis->conment( string: 'Synced" . Scount. ' opportunities.'):0.0syncOpportunitiesByDateDmands/..JSyncOpportunity.php 3 results>syncOpportunitlesByOate(5cr-Service, Strom, Sto, Sotfset);222 Scolunt • ScrmService»>syncOpportunities(SopportunitySyncParameters, Satrategyl:254 Scount « ScrmService-> syncOpportunities(SopportunitySyncParameters, Sstrategyl:› © SyncHlubspotActiveDeals.php 1 resultSyncOpportunitiesMissing/FieidDataCommand.php 1 resultapp/Console/Commands/Dealinsights 1 result0 app/3001/0rm 4 results~ D app/Listeners/Crm 1 result~©LayoutUpdatedListener.php 1 result70 Sthis-> tync Opportunities(Siayout):nds › Crm › © SyncOpportunity.php › ® SymcOpportunity › € •2string Scraid,21nt Soffset): vold (1f (Scraid) ‹F else 4зсаботзупетота моppоrик со востaservaсo, устадo, яиro, 3кos ponsuesSthis->syncOpportunitiesäyDate(ScraService, Sfron, Sto, Soffset):private function syncProfileOpportunities(nterface ScraService,1me04p00eoomb SnornToe vorcen254:43Symfony LF UTF-8 ( 4 spacesClick or hold page_up + page_down to start dictatingAneliya AngelovaStetka Stoyanova3 othersNikolay Nikolov4:06 PM | [Platform] RefinementLukas Kovalik1:04:46...
|
NULL
|
|
45474
|
960
|
13
|
2026-04-17T09:43:17.623513+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776418997623_m2.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorToo PhpStormFileEditViewNavigateCodeLaravelRefactorToolsWindowHelpFV faVsco.js#11894 on JY-18909-automated-reports-ask-jiminnyProject v© AutomatedReportsService.php© SendReportJob.php© SendReportMailJob.php© ReportController.php> D RedisTokenBuilder.php• TeamSetupController.phppnp apl.onoFilesystem.php• Team.phpc CrealenelaAcuiviyevent.onpv D ServiceTraits© TrackProviderInstalledEvent.php€ OpportunitySy© RequestGenerateReportJob.php© OpportunitySyncTrait.phpOpportunity.php& SyncCrmEntiti€ InteractsWithPivotTable.php© OpportunityStageUpdated.phpEventServiceProvider.php© SyncFieldsTraC OpportunityPendingAiAnalysisAfterStageChanged.phpC RunOpportunityAiAnalysis.php© WriteCrm Trait.ProcessaiAulomalionAnalysiskesults.ono→IUTIS© ImportOpportunityBatch.phpImportBatchJobTrait.php© Service.php•WeohookcacneastacesX3Cc W *© BatchSyncCollectTIT :157115721573© BatchSyncRedisStrait OpportunitySyncTraitAS2MAMIS AY(c) Client.php955© ClosedDealStage7506 DealFieldsService2 usages© DecorateActivity.75/private function getBusinessProcess(string $pipelineId): ?BusinessProcess© FieldDefinitions.pYo010/010/110/0- 1579© FieldTypeConveri707return Sthis->crmEntityRepository->findBusinessProcessesByExternaUId($this->config, $pipeLineIdh 1580© HubspotClientInte940© HubspotTokenMa941© PayloadBuilder.pt© RemoteCrmObjec942(C) ResponseNormali943© Service.php944© SyncFieldAction.f945© SyncRelatedActiv740© WebhookSyncBa1947v D IntegrationApp948> D Accessors949~ D Api950© ActionUrl.php951• EnumUrllnterfe952© FlowUrl.php953© PageResult.ph954e Proxyun.php955(c) recuestsuloe956La kequestcxecu• RequestExecuSystemEvents© SystemUrl.php958Y54700C TokenBuilder.f0n TiokenBuilderr© UrlBuilder.php> D Config> DDTO>M Filters>MJobs› _ ProspectSearchS> D ServiceTraits© DataClient.php© DecorateActivity.© LocalSearch.php• LocalSearchlntert963964965966967968Y04970971972973© RemoteSearch.pr© Service.php_ Listeners974988Meradara2 usages- 1583private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage15841585if (empty($stageId)) {return nuue.[CREDIT_CARD]$cacheKey = $businessProcess->getId() .':' . $stageld;if (isset($this->cachedStages[$cacheKey])) {return $this->cachedStages[$cacheKey]:[CREDIT_CARD]=15941595$stage = $this->crmEntityRepository->getPipelineStageByConditions($businessProcess,15961597'crn orovloer 1o => stadelo."type" → stage..lYFE_UPFORTONLI,1599—-001601):1602if ($stage === null) {$this->importStages(null, $stageId);1603=16041605—1606if ($stage === null) {$this->logger->info('[HubSpot] Stage does not exist => ' $stageId);16071608-16091010nunus-ocacneobtacesi ncacherey = ostader-16111612recurn ostade.1613-16141616lusageprivate function resolveAmount(array $properties): ?stringf...}161716181619[ Migration984private function parseCleanDatetime(string $datetime): ?Carbonf...}PipedriveD SalesforceD Traitsprivate function resolveDealProbability(?string $stageProbability): int{...}E custom.logV connect.vue= laravel.logA SF [jiminny@localhost]C* scratch_1.jsonV Onboard.vueHs local liminnyalocalnostiL console [EU] X© CrmEntityRepository.phpfi crm_configurations [EU]A console [PROD]A console [STAGING]X:Auto vPlayground ~S"jiminny026 A9 A22 V3 V104 ^ VShortcuts conflicts: Clone Caret Above and 1 more shortcut conflict with macOS shortcuts. Modify these shortcuts or change macOS system settings. // Modify Shortcuts // Don't Show Again (20 minutes ago)id FROM social_accounts saon u.id = sa.sociable_idI.ns->l: on t.1d = U.team_1d10= 400and sa.provider ='hubspot':mllreaturesm team_features where feature_id = 40;m teams where id = 556; # owner: 18101, crm: 477m crm_configurations where id = 477;M users WHERE id = 18101;1.id, CASE WHEN U.id = t.owner_id THEN ' (owner)' ELSE "' END) AS user_id.1o rkum social accounus salonuri = sa,sociaole 101..n<->1: on t.id = u.team idLid = 556 and sa.provider = 'integration-app';m opportunities where id = 7594349;m opportunity_stages where opportunity_id = 7594349 order by created_at dem business_processes where id = 6024;m business_process_stages where stage_id = 16352;m business_process_stages where business_process_id = 6024;m stages where team_id = 459;n teams where 1d = 45711.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE "' END) AS user_id.id FROM social_accounts sa1 on u.id = sa.sociable_id1.n<->1: on t.id = u.team_idLid = 459 and sa.provider = 'hukspot' :age_1d, s.crm_provider_1d, s.name, coonl(*) as chunity_stages oss>. UN S.10 = os.stage_10ortunity_id = 7594349Stace 1a, s.crmorovider 10, s.nameDESC;s.crm_provider_id, s.name, s.team_id, s.crm_configuration_idis_process_stages bps 1<->1.n: ON bps.stage_id = s.idsiness_process_id = 6024ovider_id = 'contractsent' :Im stages where id IN (16352,20612,18281, 7344, 16378,16309,5036, 15223, 14535.loblSupport Daily - in 2 h 17 mL AutomatedReportsCommandTestv100% C•8 • Fri 17 Apr 12:43:17CascadeAutomated Report RetrDebugging Opportunit+0 .Just one record ["id": 16352,ider_id": "contractsent","Commerclals"leam l0". 40g"crm_configuration_id": 367] Where do we look for stage by crm_provider_id only without team of configwUnly one stage wh contractsent belongs to business process 0024 — so the pivotis clean. Ineoscillation between 12 different stages with the same crm_provider_ id must be coming from somewherethat looks up stages without scoping to the business process.. Where. crm provider and pertormea o otner cuerlesFound It. Line 459;• Service.php:459-461$stage = $this->confiq→>stages(→>update0rCreate0'crm_provider_id'=> $sl'id'],1, 1This is the root causeimportStages() does update0rCreate keyed only on crm_provider_id with no team_id or typeconstalnt in tne lookue key. unis means.When HubSpot has a pipeline with dealstage = "contractsent" and importStages() runs, it searches forany existing stage with crm provider id = 'contractsent' under $this->config->stages() .sthis→>cont10→>stages scooesco crm contiquration 1d = 36/ — out there are 12 stages acrossdifferent team_id /configs all with crm_provider_id = 'contractsent' . The updateOrCreate finds the firstone that matches ane updates lt, potentlally changing its cean ld, name, elc. — or creales a new one.lnen soustnessProcess-›stageso→>syncstages auacnes al sace Ds rerurnec Trom tnarloo. 1obusiness process 6024. If update0rCreate returns different stage IDs on different runs (because thelookue matches a alverent existine row, tne syne oivot eets rewrken wiin alerentibsThe result: on subsequent resolveStage() calls, businessProcess->stages()->where('crm_provider_id',"contractsent')->first() finds whichever stage was most recently synced into the pivot — a different IDeach time imporcstages runs.The fix neededimportStages() updateOrCreate must include crm_configuration_id in the search key:Service.php:459-468$stage = $this->config->stages()→>update0rCreate(l'crm_provider_id' => $sl'id'],1, 1Should be:U php$stage = $this->config->stages()->update0rCreate(['crm_ provider id'→ $s('id'],'crm_configuration_id' → $this->config->getId(),1, LThis ensures update0rCreate never matches a stage belonging to a different config/team. The lookupbecomes specific enough that it will always tind or create the correct unique stage for this config.Oal *Ask anything (24L)+ <>Code Claude Sonnet 4.6Winasun leams940:3/16 charsulr-o( 4 spaces...
|
NULL
|
8824164858754795851
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorToo PhpStormFileEditViewNavigateCodeLaravelRefactorToolsWindowHelpFV faVsco.js#11894 on JY-18909-automated-reports-ask-jiminnyProject v© AutomatedReportsService.php© SendReportJob.php© SendReportMailJob.php© ReportController.php> D RedisTokenBuilder.php• TeamSetupController.phppnp apl.onoFilesystem.php• Team.phpc CrealenelaAcuiviyevent.onpv D ServiceTraits© TrackProviderInstalledEvent.php€ OpportunitySy© RequestGenerateReportJob.php© OpportunitySyncTrait.phpOpportunity.php& SyncCrmEntiti€ InteractsWithPivotTable.php© OpportunityStageUpdated.phpEventServiceProvider.php© SyncFieldsTraC OpportunityPendingAiAnalysisAfterStageChanged.phpC RunOpportunityAiAnalysis.php© WriteCrm Trait.ProcessaiAulomalionAnalysiskesults.ono→IUTIS© ImportOpportunityBatch.phpImportBatchJobTrait.php© Service.php•WeohookcacneastacesX3Cc W *© BatchSyncCollectTIT :157115721573© BatchSyncRedisStrait OpportunitySyncTraitAS2MAMIS AY(c) Client.php955© ClosedDealStage7506 DealFieldsService2 usages© DecorateActivity.75/private function getBusinessProcess(string $pipelineId): ?BusinessProcess© FieldDefinitions.pYo010/010/110/0- 1579© FieldTypeConveri707return Sthis->crmEntityRepository->findBusinessProcessesByExternaUId($this->config, $pipeLineIdh 1580© HubspotClientInte940© HubspotTokenMa941© PayloadBuilder.pt© RemoteCrmObjec942(C) ResponseNormali943© Service.php944© SyncFieldAction.f945© SyncRelatedActiv740© WebhookSyncBa1947v D IntegrationApp948> D Accessors949~ D Api950© ActionUrl.php951• EnumUrllnterfe952© FlowUrl.php953© PageResult.ph954e Proxyun.php955(c) recuestsuloe956La kequestcxecu• RequestExecuSystemEvents© SystemUrl.php958Y54700C TokenBuilder.f0n TiokenBuilderr© UrlBuilder.php> D Config> DDTO>M Filters>MJobs› _ ProspectSearchS> D ServiceTraits© DataClient.php© DecorateActivity.© LocalSearch.php• LocalSearchlntert963964965966967968Y04970971972973© RemoteSearch.pr© Service.php_ Listeners974988Meradara2 usages- 1583private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage15841585if (empty($stageId)) {return nuue.[CREDIT_CARD]$cacheKey = $businessProcess->getId() .':' . $stageld;if (isset($this->cachedStages[$cacheKey])) {return $this->cachedStages[$cacheKey]:[CREDIT_CARD]=15941595$stage = $this->crmEntityRepository->getPipelineStageByConditions($businessProcess,15961597'crn orovloer 1o => stadelo."type" → stage..lYFE_UPFORTONLI,1599—-001601):1602if ($stage === null) {$this->importStages(null, $stageId);1603=16041605—1606if ($stage === null) {$this->logger->info('[HubSpot] Stage does not exist => ' $stageId);16071608-16091010nunus-ocacneobtacesi ncacherey = ostader-16111612recurn ostade.1613-16141616lusageprivate function resolveAmount(array $properties): ?stringf...}161716181619[ Migration984private function parseCleanDatetime(string $datetime): ?Carbonf...}PipedriveD SalesforceD Traitsprivate function resolveDealProbability(?string $stageProbability): int{...}E custom.logV connect.vue= laravel.logA SF [jiminny@localhost]C* scratch_1.jsonV Onboard.vueHs local liminnyalocalnostiL console [EU] X© CrmEntityRepository.phpfi crm_configurations [EU]A console [PROD]A console [STAGING]X:Auto vPlayground ~S"jiminny026 A9 A22 V3 V104 ^ VShortcuts conflicts: Clone Caret Above and 1 more shortcut conflict with macOS shortcuts. Modify these shortcuts or change macOS system settings. // Modify Shortcuts // Don't Show Again (20 minutes ago)id FROM social_accounts saon u.id = sa.sociable_idI.ns->l: on t.1d = U.team_1d10= 400and sa.provider ='hubspot':mllreaturesm team_features where feature_id = 40;m teams where id = 556; # owner: 18101, crm: 477m crm_configurations where id = 477;M users WHERE id = 18101;1.id, CASE WHEN U.id = t.owner_id THEN ' (owner)' ELSE "' END) AS user_id.1o rkum social accounus salonuri = sa,sociaole 101..n<->1: on t.id = u.team idLid = 556 and sa.provider = 'integration-app';m opportunities where id = 7594349;m opportunity_stages where opportunity_id = 7594349 order by created_at dem business_processes where id = 6024;m business_process_stages where stage_id = 16352;m business_process_stages where business_process_id = 6024;m stages where team_id = 459;n teams where 1d = 45711.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE "' END) AS user_id.id FROM social_accounts sa1 on u.id = sa.sociable_id1.n<->1: on t.id = u.team_idLid = 459 and sa.provider = 'hukspot' :age_1d, s.crm_provider_1d, s.name, coonl(*) as chunity_stages oss>. UN S.10 = os.stage_10ortunity_id = 7594349Stace 1a, s.crmorovider 10, s.nameDESC;s.crm_provider_id, s.name, s.team_id, s.crm_configuration_idis_process_stages bps 1<->1.n: ON bps.stage_id = s.idsiness_process_id = 6024ovider_id = 'contractsent' :Im stages where id IN (16352,20612,18281, 7344, 16378,16309,5036, 15223, 14535.loblSupport Daily - in 2 h 17 mL AutomatedReportsCommandTestv100% C•8 • Fri 17 Apr 12:43:17CascadeAutomated Report RetrDebugging Opportunit+0 .Just one record ["id": 16352,ider_id": "contractsent","Commerclals"leam l0". 40g"crm_configuration_id": 367] Where do we look for stage by crm_provider_id only without team of configwUnly one stage wh contractsent belongs to business process 0024 — so the pivotis clean. Ineoscillation between 12 different stages with the same crm_provider_ id must be coming from somewherethat looks up stages without scoping to the business process.. Where. crm provider and pertormea o otner cuerlesFound It. Line 459;• Service.php:459-461$stage = $this->confiq→>stages(→>update0rCreate0'crm_provider_id'=> $sl'id'],1, 1This is the root causeimportStages() does update0rCreate keyed only on crm_provider_id with no team_id or typeconstalnt in tne lookue key. unis means.When HubSpot has a pipeline with dealstage = "contractsent" and importStages() runs, it searches forany existing stage with crm provider id = 'contractsent' under $this->config->stages() .sthis→>cont10→>stages scooesco crm contiquration 1d = 36/ — out there are 12 stages acrossdifferent team_id /configs all with crm_provider_id = 'contractsent' . The updateOrCreate finds the firstone that matches ane updates lt, potentlally changing its cean ld, name, elc. — or creales a new one.lnen soustnessProcess-›stageso→>syncstages auacnes al sace Ds rerurnec Trom tnarloo. 1obusiness process 6024. If update0rCreate returns different stage IDs on different runs (because thelookue matches a alverent existine row, tne syne oivot eets rewrken wiin alerentibsThe result: on subsequent resolveStage() calls, businessProcess->stages()->where('crm_provider_id',"contractsent')->first() finds whichever stage was most recently synced into the pivot — a different IDeach time imporcstages runs.The fix neededimportStages() updateOrCreate must include crm_configuration_id in the search key:Service.php:459-468$stage = $this->config->stages()→>update0rCreate(l'crm_provider_id' => $sl'id'],1, 1Should be:U php$stage = $this->config->stages()->update0rCreate(['crm_ provider id'→ $s('id'],'crm_configuration_id' → $this->config->getId(),1, LThis ensures update0rCreate never matches a stage belonging to a different config/team. The lookupbecomes specific enough that it will always tind or create the correct unique stage for this config.Oal *Ask anything (24L)+ <>Code Claude Sonnet 4.6Winasun leams940:3/16 charsulr-o( 4 spaces...
|
45469
|
|
51454
|
1112
|
86
|
2026-04-18T11:43:53.897478+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-18/1776 /Users/lukas/.screenpipe/data/data/2026-04-18/1776512633897_m2.jpg...
|
Firefox
|
SQLite Web: db.sqlite — Personal
|
True
|
http://100.73.206.126:8767/audio_transcriptions_ft
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
Статус на поръчка в stantek.com - DXP4800PLUS-B5F8
Статус на поръчка в stantek.com - [EMAIL] - Gmail
Stantek
Stantek
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
| Senetic
| Senetic
Stantek
Stantek
| Senetic
| Senetic
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Close tab
Screenpipe Dashboard
Screenpipe Dashboard
Welcome to Steam
Welcome to Steam
(118) Orbán 2.0? Bulgaria's Big Election Explained - YouTube
Mute tab
(118) Orbán 2.0? Bulgaria's Big Election Explained - YouTube
New Tab
New Tab
Today's Deals
Today's Deals
New Tab
New Tab
Shameless • HBO Max
Shameless • HBO Max
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
install screenpipe - screenpipe docs
install screenpipe - screenpipe docs
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_fts_config
1 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
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
k
k
v
v
version
4
k
k
version
v
v
4
«
«
‹
‹
Page 1 / 1
›
›
»
»
SQLite database browser
v0.7.2
, powered by
Flask
Flask
and
Peewee
Peewee
. © 2026
Charles Leifer
Charles Leifer...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.00234375,"top":0.045138888,"width":0.064453125,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Статус на поръчка в stantek.com - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.06679688,"top":0.045138888,"width":0.06484375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Stantek","depth":4,"bounds":{"left":0.0,"top":0.08263889,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Stantek","depth":5,"bounds":{"left":0.015625,"top":0.09236111,"width":0.015625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.0,"top":0.11111111,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.015625,"top":0.12083333,"width":0.30859375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"| Senetic","depth":4,"bounds":{"left":0.0,"top":0.13958333,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"| Senetic","depth":5,"bounds":{"left":0.015625,"top":0.14930555,"width":0.017578125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Stantek","depth":4,"bounds":{"left":0.0,"top":0.16805555,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Stantek","depth":5,"bounds":{"left":0.015625,"top":0.17777778,"width":0.015625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"| Senetic","depth":4,"bounds":{"left":0.0,"top":0.19652778,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"| Senetic","depth":5,"bounds":{"left":0.015625,"top":0.20625,"width":0.017578125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Твърд диск, Western Digital Red 6TB Plus ( 3.5\", 256MB, 5400","depth":4,"bounds":{"left":0.0,"top":0.225,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Твърд диск, Western Digital Red 6TB Plus ( 3.5\", 256MB, 5400","depth":5,"bounds":{"left":0.015625,"top":0.23472223,"width":0.12929687,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.0,"top":0.2534722,"width":0.13359375,"height":0.028472222},"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.015625,"top":0.26319444,"width":0.044140626,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.119140625,"top":0.25972223,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Screenpipe Dashboard","depth":4,"bounds":{"left":0.0,"top":0.28194445,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe Dashboard","depth":5,"bounds":{"left":0.015625,"top":0.29166666,"width":0.046484374,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Welcome to Steam","depth":4,"bounds":{"left":0.0,"top":0.31041667,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome to Steam","depth":5,"bounds":{"left":0.015625,"top":0.3201389,"width":0.03828125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"(118) Orbán 2.0? Bulgaria's Big Election Explained - YouTube","depth":4,"bounds":{"left":0.0,"top":0.33888888,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Mute tab","depth":5,"bounds":{"left":0.01328125,"top":0.34513888,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(118) Orbán 2.0? Bulgaria's Big Election Explained - YouTube","depth":5,"bounds":{"left":0.0234375,"top":0.34861112,"width":0.12382813,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.3673611,"width":0.13359375,"height":0.028472222},"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.015625,"top":0.37708333,"width":0.017578125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.0,"top":0.39583334,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.015625,"top":0.40555555,"width":0.028515626,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.42430556,"width":0.13359375,"height":0.028472222},"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.015625,"top":0.4340278,"width":0.017578125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Shameless • HBO Max","depth":4,"bounds":{"left":0.0,"top":0.45277777,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Shameless • HBO Max","depth":5,"bounds":{"left":0.015625,"top":0.4625,"width":0.045703124,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.0,"top":0.48125,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.015625,"top":0.49097222,"width":0.26523438,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"install screenpipe - screenpipe docs","depth":4,"bounds":{"left":0.0,"top":0.50972223,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"install screenpipe - screenpipe docs","depth":5,"bounds":{"left":0.015625,"top":0.51944447,"width":0.07421875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.003125,"top":0.5395833,"width":0.12734374,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.003125,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.01640625,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.029296875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0421875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.05546875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"sqlite-web 0.7.2","depth":7,"bounds":{"left":0.13984375,"top":0.050694443,"width":0.05078125,"height":0.027083334},"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.13984375,"top":0.05625,"width":0.05078125,"height":0.015972223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"db.sqlite","depth":10,"bounds":{"left":0.196875,"top":0.050694443,"width":0.028125,"height":0.02638889},"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.2,"top":0.057638887,"width":0.021875,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"audio_transcriptions_fts_config","depth":10,"bounds":{"left":0.225,"top":0.057638887,"width":0.08125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1 rows, showing page 1","depth":9,"bounds":{"left":0.3078125,"top":0.058333334,"width":0.052734375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Query","depth":8,"bounds":{"left":0.9722656,"top":0.05347222,"width":0.021484375,"height":0.020833334},"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.97578126,"top":0.058333334,"width":0.014453125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"table name...","depth":7,"bounds":{"left":0.13945313,"top":0.097222224,"width":0.1328125,"height":0.02013889},"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.13945313,"top":0.11736111,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.12083333,"width":0.045703124,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"audio_chunks","depth":9,"bounds":{"left":0.13945313,"top":0.1375,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.14097223,"width":0.03671875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"audio_tags","depth":9,"bounds":{"left":0.13945313,"top":0.15694444,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.16041666,"width":0.0296875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"audio_transcriptions","depth":9,"bounds":{"left":0.13945313,"top":0.17708333,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.18055555,"width":0.0546875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"audio_transcriptions_fts (v)","depth":9,"bounds":{"left":0.13945313,"top":0.19652778,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.2,"width":0.06679688,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(v)","depth":11,"bounds":{"left":0.21015625,"top":0.19861111,"width":0.00546875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"audio_transcriptions_...","depth":9,"bounds":{"left":0.13945313,"top":0.21666667,"width":0.1328125,"height":0.020833334},"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.14375,"top":0.22083333,"width":0.06289063,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"audio_transcriptions_...","depth":9,"bounds":{"left":0.13945313,"top":0.2375,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.24097222,"width":0.06289063,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"audio_transcriptions_...","depth":9,"bounds":{"left":0.13945313,"top":0.2576389,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.2611111,"width":0.06289063,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"elements","depth":9,"bounds":{"left":0.13945313,"top":0.27708334,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.28055555,"width":0.024609376,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"elements_fts (v)","depth":9,"bounds":{"left":0.13945313,"top":0.29722223,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.30069444,"width":0.036328126,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(v)","depth":11,"bounds":{"left":0.1796875,"top":0.29930556,"width":0.005859375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"elements_fts_config","depth":9,"bounds":{"left":0.13945313,"top":0.31666666,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.3201389,"width":0.0546875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"elements_fts_data","depth":9,"bounds":{"left":0.13945313,"top":0.33680555,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.3402778,"width":0.049609374,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"elements_fts_idx","depth":9,"bounds":{"left":0.13945313,"top":0.35625,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.35972223,"width":0.045703124,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"frames","depth":9,"bounds":{"left":0.13945313,"top":0.37638888,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.37986112,"width":0.01875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"frames_fts (v)","depth":9,"bounds":{"left":0.13945313,"top":0.39583334,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.39930555,"width":0.03046875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(v)","depth":11,"bounds":{"left":0.17382812,"top":0.39791667,"width":0.005859375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"frames_fts_config","depth":9,"bounds":{"left":0.13945313,"top":0.41597223,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.41944444,"width":0.048828125,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"frames_fts_data","depth":9,"bounds":{"left":0.13945313,"top":0.43541667,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.43888888,"width":0.04375,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"frames_fts_idx","depth":9,"bounds":{"left":0.13945313,"top":0.45555556,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.45902777,"width":0.03984375,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"meetings","depth":9,"bounds":{"left":0.13945313,"top":0.475,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.47847223,"width":0.024609376,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"memories","depth":9,"bounds":{"left":0.13945313,"top":0.49513888,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.49861112,"width":0.0265625,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"memories_fts (v)","depth":9,"bounds":{"left":0.13945313,"top":0.51458335,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.51805556,"width":0.03828125,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(v)","depth":11,"bounds":{"left":0.18164062,"top":0.51666665,"width":0.005859375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"memories_fts_config","depth":9,"bounds":{"left":0.13945313,"top":0.5347222,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.5381944,"width":0.056640625,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"memories_fts_data","depth":9,"bounds":{"left":0.13945313,"top":0.5541667,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.5576389,"width":0.0515625,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"memories_fts_idx","depth":9,"bounds":{"left":0.13945313,"top":0.57430553,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.5777778,"width":0.04765625,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ocr_text","depth":9,"bounds":{"left":0.13945313,"top":0.59375,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.5972222,"width":0.021875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipe_executions","depth":9,"bounds":{"left":0.13945313,"top":0.61388886,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.6173611,"width":0.043359376,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipe_scheduler_state","depth":9,"bounds":{"left":0.13945313,"top":0.6333333,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.63680553,"width":0.057421874,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"secrets","depth":9,"bounds":{"left":0.13945313,"top":0.65347224,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.65694445,"width":0.01953125,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"speaker_embeddings","depth":9,"bounds":{"left":0.13945313,"top":0.67291665,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.67638886,"width":0.057421874,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"speakers","depth":9,"bounds":{"left":0.13945313,"top":0.69305557,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.6965278,"width":0.02421875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"sqlite_sequence","depth":9,"bounds":{"left":0.13945313,"top":0.7125,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.71597224,"width":0.04375,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"tags","depth":9,"bounds":{"left":0.13945313,"top":0.7326389,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.7361111,"width":0.01171875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ui_events","depth":9,"bounds":{"left":0.13945313,"top":0.75208336,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.75555557,"width":0.025390625,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ui_events_fts (v)","depth":9,"bounds":{"left":0.13945313,"top":0.7722222,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.77569443,"width":0.0375,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(v)","depth":11,"bounds":{"left":0.18085937,"top":0.7743056,"width":0.005859375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ui_events_fts_config","depth":9,"bounds":{"left":0.13945313,"top":0.7916667,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.7951389,"width":0.05546875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ui_events_fts_data","depth":9,"bounds":{"left":0.13945313,"top":0.81180555,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.81527776,"width":0.05078125,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ui_events_fts_idx","depth":9,"bounds":{"left":0.13945313,"top":0.83125,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.8347222,"width":0.046875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"video_chunks","depth":9,"bounds":{"left":0.13945313,"top":0.8513889,"width":0.1328125,"height":0.019444445},"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.14335938,"top":0.85486114,"width":0.03671875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vision_tags","depth":9,"bounds":{"left":0.13945313,"top":0.87083334,"width":0.1328125,"height":0.02013889},"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.14335938,"top":0.87430555,"width":0.03046875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Toggle helper tables","depth":8,"bounds":{"left":0.13945313,"top":0.9152778,"width":0.0546875,"height":0.013194445},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Toggle helper tables","depth":9,"bounds":{"left":0.13945313,"top":0.9152778,"width":0.0546875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Structure","depth":9,"bounds":{"left":0.28398436,"top":0.097222224,"width":0.03828125,"height":0.027777778},"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.290625,"top":0.104166664,"width":0.025,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Content","depth":9,"bounds":{"left":0.32226562,"top":0.097222224,"width":0.034765624,"height":0.027777778},"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.32890624,"top":0.104166664,"width":0.021484375,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Query","depth":9,"bounds":{"left":0.35703126,"top":0.097222224,"width":0.029296875,"height":0.027777778},"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.36367187,"top":0.104166664,"width":0.016015625,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Export","depth":9,"bounds":{"left":0.38632813,"top":0.097222224,"width":0.030859375,"height":0.027777778},"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.39296874,"top":0.104166664,"width":0.017578125,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"k","depth":10,"bounds":{"left":0.2859375,"top":0.14166667,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"k","depth":11,"bounds":{"left":0.2859375,"top":0.14166667,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"v","depth":10,"bounds":{"left":0.82109374,"top":0.14166667,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"v","depth":11,"bounds":{"left":0.82109374,"top":0.14166667,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"version","depth":10,"bounds":{"left":0.2859375,"top":0.15763889,"width":0.0171875,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4","depth":10,"bounds":{"left":0.82109374,"top":0.15763889,"width":0.003125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"k","depth":10,"bounds":{"left":0.2859375,"top":0.14166667,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"k","depth":11,"bounds":{"left":0.2859375,"top":0.14166667,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"version","depth":10,"bounds":{"left":0.2859375,"top":0.15763889,"width":0.0171875,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"v","depth":10,"bounds":{"left":0.82109374,"top":0.14166667,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"v","depth":11,"bounds":{"left":0.82109374,"top":0.14166667,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4","depth":10,"bounds":{"left":0.82109374,"top":0.15763889,"width":0.003125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"«","depth":10,"bounds":{"left":0.28398436,"top":0.18194444,"width":0.013671875,"height":0.025694445},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"«","depth":11,"bounds":{"left":0.2890625,"top":0.18819444,"width":0.003515625,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"‹","depth":10,"bounds":{"left":0.29882812,"top":0.18194444,"width":0.012890625,"height":0.025694445},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"‹","depth":11,"bounds":{"left":0.30390626,"top":0.18819444,"width":0.002734375,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Page 1 / 1","depth":11,"bounds":{"left":0.31796876,"top":0.18819444,"width":0.024609376,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"›","depth":10,"bounds":{"left":0.34882814,"top":0.18194444,"width":0.0125,"height":0.025694445},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"›","depth":11,"bounds":{"left":0.35390624,"top":0.18819444,"width":0.00234375,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"»","depth":10,"bounds":{"left":0.3625,"top":0.18194444,"width":0.0140625,"height":0.025694445},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"»","depth":11,"bounds":{"left":0.36757812,"top":0.18819444,"width":0.00390625,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SQLite database browser","depth":9,"bounds":{"left":0.28398436,"top":0.23333333,"width":0.061328124,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"v0.7.2","depth":9,"bounds":{"left":0.3453125,"top":0.23333333,"width":0.013671875,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", powered by","depth":9,"bounds":{"left":0.35898438,"top":0.23333333,"width":0.032421876,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Flask","depth":9,"bounds":{"left":0.39140624,"top":0.23333333,"width":0.012109375,"height":0.011111111},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Flask","depth":10,"bounds":{"left":0.39140624,"top":0.23333333,"width":0.012109375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":9,"bounds":{"left":0.40351564,"top":0.23333333,"width":0.012109375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Peewee","depth":9,"bounds":{"left":0.415625,"top":0.23333333,"width":0.018359374,"height":0.011111111},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Peewee","depth":10,"bounds":{"left":0.415625,"top":0.23333333,"width":0.018359374,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". © 2026","depth":9,"bounds":{"left":0.43398437,"top":0.23333333,"width":0.023046875,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Charles Leifer","depth":9,"bounds":{"left":0.45703125,"top":0.23333333,"width":0.0328125,"height":0.011111111},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Charles Leifer","depth":10,"bounds":{"left":0.45703125,"top":0.23333333,"width":0.0328125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8824033268976491327
|
-8591709959284127005
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
Статус на поръчка в stantek.com - DXP4800PLUS-B5F8
Статус на поръчка в stantek.com - [EMAIL] - Gmail
Stantek
Stantek
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
| Senetic
| Senetic
Stantek
Stantek
| Senetic
| Senetic
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Close tab
Screenpipe Dashboard
Screenpipe Dashboard
Welcome to Steam
Welcome to Steam
(118) Orbán 2.0? Bulgaria's Big Election Explained - YouTube
Mute tab
(118) Orbán 2.0? Bulgaria's Big Election Explained - YouTube
New Tab
New Tab
Today's Deals
Today's Deals
New Tab
New Tab
Shameless • HBO Max
Shameless • HBO Max
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
install screenpipe - screenpipe docs
install screenpipe - screenpipe docs
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_fts_config
1 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
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
k
k
v
v
version
4
k
k
version
v
v
4
«
«
‹
‹
Page 1 / 1
›
›
»
»
SQLite database browser
v0.7.2
, powered by
Flask
Flask
and
Peewee
Peewee
. © 2026
Charles Leifer
Charles Leifer...
|
51453
|
|
40447
|
844
|
4
|
2026-04-16T16:05:15.003512+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776355515003_m1.jpg...
|
Firefox
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2• 0Shell Edit ViewSessionScriptsProfilesWi iTerm2• 0Shell Edit ViewSessionScriptsProfilesWindowHelp-zshDOCKERO ₴1X3DEV (-zsh)• 72APP (-zsh)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT'elements_fts'as name, COUNT(*) as rows FROM elements_ftsUNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_ftsUNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_ftsUNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;"elements_fts|2595462frames_ftsl40394ui_events_fts151394audio_transcriptions_ftsl3Lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT name, SUM(payload)as bytesFROM dbstatWHERE name IN ('elements_fts_data', 'frames_fts_data', 'ui_events_fts_data')GROUP BY name;"elements_fts_datal49417125frames_fts_datal 46211048ui_events_fts_datal 1661147lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $screenpipe"(ah)O 84-zsh100% C 8Thu 16 Apr 19:05:14181* Review screenpipe usage a...• X6...
|
NULL
|
8824020938126003260
|
NULL
|
app_switch
|
ocr
|
NULL
|
iTerm2• 0Shell Edit ViewSessionScriptsProfilesWi iTerm2• 0Shell Edit ViewSessionScriptsProfilesWindowHelp-zshDOCKERO ₴1X3DEV (-zsh)• 72APP (-zsh)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT'elements_fts'as name, COUNT(*) as rows FROM elements_ftsUNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_ftsUNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_ftsUNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;"elements_fts|2595462frames_ftsl40394ui_events_fts151394audio_transcriptions_ftsl3Lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT name, SUM(payload)as bytesFROM dbstatWHERE name IN ('elements_fts_data', 'frames_fts_data', 'ui_events_fts_data')GROUP BY name;"elements_fts_datal49417125frames_fts_datal 46211048ui_events_fts_datal 1661147lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $screenpipe"(ah)O 84-zsh100% C 8Thu 16 Apr 19:05:14181* Review screenpipe usage a...• X6...
|
NULL
|
|
21035
|
464
|
55
|
2026-04-15T09:47:41.372098+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776246461372_m2.jpg...
|
Boosteroid
|
Boosteroid
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
© Ena sessionGENERAL SETTINGSSensitivityMouse acce © Ena sessionGENERAL SETTINGSSensitivityMouse accelerationPreserve aspect raticClip recordingcan signiricanuly arect tne qualltyor a stream and requires tree aisk• Record/StopOPEN CLIP LOCATIONSTREAMING1O FPS120Changing FPS may lead to temporary stream• BitrateMDEOSEMTINGDefaultAUDlO SEndINoINPUT-Me SensitivityAbole Inc.: sounecore Aeroclle•UTPUTApple Inc.: soundcore AeroClipShow advanced info...
|
NULL
|
8823961751535811703
|
NULL
|
visual_change
|
ocr
|
NULL
|
© Ena sessionGENERAL SETTINGSSensitivityMouse acce © Ena sessionGENERAL SETTINGSSensitivityMouse accelerationPreserve aspect raticClip recordingcan signiricanuly arect tne qualltyor a stream and requires tree aisk• Record/StopOPEN CLIP LOCATIONSTREAMING1O FPS120Changing FPS may lead to temporary stream• BitrateMDEOSEMTINGDefaultAUDlO SEndINoINPUT-Me SensitivityAbole Inc.: sounecore Aeroclle•UTPUTApple Inc.: soundcore AeroClipShow advanced info...
|
NULL
|
|
12659
|
270
|
40
|
2026-04-14T11:29:32.476992+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776166172476_m1.jpg...
|
PhpStorm
|
faVsco.js – AutomatedReportsCommand.php
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AutomatedReportsCommandTest
Run 'AutomatedReportsCommandTest'
Debug 'AutomatedReportsCommandTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
17
15
13
Previous Highlighted Error
Next Highlighted Error
SELECT * FROM teams WHERE id = 1;
select * from crm_layouts where crm_configuration_id = 39;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 283;
SELECT * FROM crm_fields WHERE id = 2234;
SELECT * FROM crm_field_values WHERE crm_field_id = 2234;
select * from crm_profiles where user_id = 143;
select * from record_types where crm_configuration_id = 39; # 0121K000001MHElQAO,0121K000001MHEqQAO
select * from business_processes where crm_configuration_id = 39;
# 01941000000H669AAC, 01941000000H66JAAS
select * from record_type_field_values
where record_type_id IN (24);
select * from crm_field_values where id IN (2730);
select * from crm_configurations where id = 39;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 1
and sa.provider = 'salesforce'; #1035
select * from users where team_id = 1; # 222 group 3
SELECT * FROM activities WHERE user_id = 222 order by id desc;
select * from sidekick_settings where team_id = 1;
select * from teams where id = 1;
select * from team_features where team_id = 1;
select * from activities where crm_configuration_id = 2
and provider = 'ms-teams' and id = 608765;
SELECT * FROM activities WHERE crm_configuration_id = 2 and crm_provider_id = '59523413338';
select * from sidekick_settings where team_id = 2;
SELECT * FROM activities WHERE id = 608660;
select * from activity_summary_logs where activity_id = 608660;
select * from ai_prompts where transcription_id = 11214;
# [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('ed78a437-2804-450e-ab2f-56ab1c641346') = uuid;
# id: 608818, crm: 59628809737
SELECT * FROM activities WHERE uuid_to_bin('36b06e55-afdd-4782-8dee-c624cd0af191') = uuid;
# id: 608821, crm: 59632069252
SELECT ce.start_time, ce.end_time, a.id, a.uuid, crm_provider_id, calendar_event_id, title,
playbook_category_id, user_id, lead_id, contact_id, account_id, opportunity_id,
scheduled_start_time, scheduled_end_time, actual_start_time, actual_end_time, a.created_at
FROM activities a
join calendar_events ce on a.calendar_event_id = ce.id
WHERE a.id IN (608818, 608821);
select * from users where team_id = 1;
select * from team_settings where team_id = 1;
select * from crm_profiles where crm_configuration_id = 39 order by user_id;
select * from team_features where team_id = 1;
select * from users where team_id = 2;
SELECT * FROM activities WHERE uuid_to_bin('ec7647e9-5225-458b-b475-f31aa2769204') = uuid; # 612639
# Preslava N. Ivanova, grou id 3
SELECT * FROM opportunities WHERE uuid_to_bin('a2928fe5-aec5-46cb-85d9-7654c89e46a6') = uuid;
select * from activities where opportunity_id = 344 and actual_start_time between '2024-10-11 00:00:00' and '2024-10-12 00:00:00';
select
a.id,
a.type,
a.scheduled_start_time,
a.actual_start_time,
a.created_at,
a.opportunity_id,
a.status
FROM activities a
WHERE opportunity_id = 344
and status IN ('completed', 'received', 'delivered')
and (
(a.actual_start_time between '2024-10-11 00:00:00' and '2024-10-12 00:00:00')
OR (a.created_at between '2024-10-11 00:00:00' and '2024-10-12 00:00:00')
OR (a.scheduled_start_time between '2024-10-11 00:00:00' and '2024-10-12 00:00:00'))
;
SELECT * FROM users WHERE id = 222;
SELECT * FROM crm_profiles WHERE user_id = 222;
select * from crm_layouts where crm_configuration_id = 39;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 281;
select * from group_deal_risk_types;
select * from opportunities where team_id = 1;
SELECT * FROM opportunities WHERE id = 315;
SELECT * FROM crm_field_data WHERE object_id = 315;
select * from crm_field_data where object_id = 260;
select * from generic_ai_prompts where subject_id = 315;
select * from teams; # 36, 21, 121, [EMAIL]
SELECT * FROM social_accounts WHERE sociable_id = 121 and provider = 'bullhorn';
# [PASSWORD_DOTS]
select * from teams where id = 1;
select * from crm_configurations where id = 39;
select * from users where team_id = 1;
select u.email, cp.* from users u
join crm_profiles cp on u.id = cp.user_id
where u.team_id = 1;
# 1 - 00541000004281rAAA
# 204 - 0052g000003freeAAA
# 429 - 0052g000003qGOiAAM
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 1
and sa.provider = 'salesforce';
select * from activities where type = 'softphone'
and created_at > '2024-12-11 15:24:36' order by id desc;
select * from activity_providers where team_id = 1;
select * from activity_provider_users where activity_provider_id = 328;
select * from opportunities where crm_configuration_id = 39
AND account_id = 178 AND is_closed = false
order by created_at DESC;
select * from contacts where id = 3952;
select * from accounts where id = 178;
# [PASSWORD_DOTS]
select * from teams where id = 36;
select * from crm_configurations where id = 21;
select * from users where team_id = 36;
select u.email, cp.* from users u
join crm_profiles cp on u.id = cp.user_id
where u.team_id = 36;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 36
and sa.provider = 'bullhorn';
select * from social_accounts where id = 348;
UPDATE social_accounts SET
provider_user_token = '21442_6802599_91:41179a58-21e7-4d7c-ad58-56bb666b2f65',
provider_refresh_token = '21442_6802599_91:01c6b335-3f2a-42e4-85ff-8a08fa65fceb',
expires = 1733998131,
state = 'connected'
WHERE id = 348;
# [PASSWORD_DOTS]
select * from teams where id = 31;
select * from crm_configurations where id = 18;
select * from users where team_id = 31; # 257
select u.email, cp.* from users u
join crm_profiles cp on u.id = cp.user_id
where u.team_id = 31;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 31
and sa.provider = 'close';
select * from contacts where crm_configuration_id = 18;
# [PASSWORD_DOTS] NEPTUNE [PASSWORD_DOTS]
select * from teams;
select * from users where id IN (1030, 1035, 1052);
select * from crm_configurations;
select * from users where team_id = 65; # 257
select * from team_settings where team_id = 65; # 257
select * from invitations where team_id = 65; # 257
select * from users where email = '[EMAIL]'; # 257
select u.email, cp.* from users u
join crm_profiles cp on u.id = cp.user_id
where u.team_id = 65;
select * from crm_configurations where id = 53;
select * from accounts where crm_configuration_id = 53 order by id desc;
select * from leads where crm_configuration_id = 53 order by id desc;
select * from contacts where crm_configuration_id = 53 order by id desc;
select * from opportunities where crm_configuration_id = 53 order by id desc;
select * from crm_profiles where crm_configuration_id = 53 order by id desc;
select * from crm_fields where crm_configuration_id = 53 order by id desc;
select * from crm_field_values where crm_field_id = 3341 order by id desc;
select * from crm_layouts where crm_configuration_id = 53 order by id desc;
select * from stages where crm_configuration_id = 53 order by id desc;
select * from crm_profiles where crm_configuration_id = 13;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 65
and sa.provider = 'integration-app';
select * from contacts where crm_configuration_id = 13;
select * from social_accounts where sociable_id = 283;
SELECT * FROM opportunities WHERE crm_provider_id = '006O400000E9bzeIAB';
select * from activity_providers where team_id = 65;
SELECT * FROM activities WHERE crm_configuration_id IN (51, 52, 53);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 65
;
# [PASSWORD_DOTS] STAGING [PASSWORD_DOTS]
SELECT * FROM teams;
SELECT * FROM teams WHERE id = 88;
SELECT * FROM teams WHERE id = 89;
select * from team_settings where team_id = 89;
SELECT * FROM users WHERE team_id = 89;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 89;
select * from users;
SELECT * FROM social_accounts WHERE sociable_id = 1761;
SELECT * FROM crm_configurations WHERE id = 70;
select * from accounts where crm_configuration_id = 70 order by id desc;
select * from leads where crm_configuration_id = 70 order by id desc;
select * from contacts where crm_configuration_id = 70 order by id desc;
select * from opportunities where crm_configuration_id = 70 order by id desc;
select * from crm_profiles where crm_configuration_id = 70 order by id desc;
select * from crm_fields where crm_configuration_id = 70 order by id desc;
select * from crm_field_values where crm_field_id = 3536 order by id desc;
select * from crm_layouts where crm_configuration_id = 70 order by id desc;
select * from stages where crm_configuration_id = 70 order by id desc;
select * from business_processes where crm_configuration_id = 70 order by id desc;
select * from business_process_stages where business_process_id = 34;
select * from contacts where id = 10468;
select * from crm_layouts where crm_configuration_id = 70;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 388;
SELECT * FROM crm_fields WHERE id IN (3533,3534,3535);
select * from activities where crm_configuration_id = 70
and (account_id IS NOT NULL or lead_id IS NOT NULL or contact_id IS NOT NULL or opportunity_id IS NOT NULL) order by id desc;
SELECT * FROM activities WHERE uuid_to_bin('2e10b60f-8a61-41c5-a3d4-28835353dc65') = uuid;
SELECT * FROM activities where crm_configuration_id = 69 ;
SELECT * FROM users WHERE email LIKE '%[EMAIL]%';
SELECT * FROM activities WHERE uuid_to_bin('5a150c93-40fc-42ec-b3bd-c1d328e09f6e') = uuid;
SELECT * FROM opportunities WHERE id = 385;
select * from participants p
join activities a on p.activity_id = a.id
where a.crm_configuration_id = 70
and (p.lead_id IS NOT NULL or p.contact_id IS NOT NULL);
SELECT * FROM participants WHERE id = 1013638;
select * from teams where id = 90;
select * from users where team_id = 90;
select * from social_accounts where social_accounts.sociable_id IN (1960,1760);
SELECT * FROM crm_profiles WHERE crm_configuration_id = 71;
select * from invitations where team_id = 90;
select * from crm_configurations where id = 71;
select * from accounts where crm_configuration_id = 71 order by id desc;
select * from leads where crm_configuration_id = 71 order by id desc;
select * from contacts where crm_configuration_id = 71 order by id desc;
select * from opportunities where crm_configuration_id = 71 order by id desc;
select * from crm_profiles where crm_configuration_id = 71 order by id desc;
select * from crm_fields where crm_configuration_id = 71 order by id desc;
select * from crm_field_values where crm_field_id = 3341 order by id desc;
select * from crm_layouts where crm_configuration_id = 71 order by id desc;
select * from stages where crm_configuration_id = 71 order by id desc;
select * from users order by secondary_email desc;
select u.id, u.email, u.status, sa.id, sa.provider_user_id from social_accounts sa
join users u on sa.sociable_id = u.id
where sa.provider = 'google' and u.email LIKE 'aneliya%';
select * from failed_jobs order by id desc;
select * from users where email = '[EMAIL]' or secondary_email = '[EMAIL]';
select * from teams;
SELECT * FROM crm_profiles WHERE crm_configuration_id = 39;
SELECT * FROM crm_fields WHERE crm_configuration_id = 39 and object_type = 'task';
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 1
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('c38b3895-fd0f-4b1f-9fb2-c170dba137c6') = uuid;
SELECT * FROM crm_configurations WHERE id = 70;
select * from teams where id = 1;
select * from groups where team_id = 1;
select * from users where team_id = 1;
select o.id, o.name,o.close_date, u.id, u.name, u.group_id, r.id, r.display_name, g.name, g.scope from opportunities o
join users u on o.user_id = u.id
join groups g on u.group_id = g.id
join role_user ru on u.id = ru.user_id
join roles r on ru.role_id = r.id
where o.crm_configuration_id = 39 and close_date > '2024-01-01 00:00:00';
select * from role_user where user_id = 143;
select * from roles;
select * from role_user;
select * from groups where id = 9;
select * from scope_groups where group_id = 9;
# [PASSWORD_DOTS]
select * from teams where id = 36;
select * from crm_configurations;
SELECT * FROM social_accounts WHERE sociable_id = 121;
[URL_WITH_CREDENTIALS] string
*/
protected $signature = 'automated-reports
{--report-id= : Process a specific report by ID or UUID (bypasses frequency scheduling)}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly).
Use --report-id to manually trigger a specific report by ID or UUID.';
public function __construct(
private readonly LoggerInterface $logger,
private readonly BusDispatcher $dispatcher,
private readonly AutomatedReportsRepository $reportRepository
) {
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle(): int
{
$this->logger->info(self::LOG_PREFIX . ' Started');
$now = Carbon::now();
$isMonday = $now->isMonday();
$isFirstDayOfMonth = $now->day === 1;
$currentMonth = $now->month;
// Check if the current month is a quarterly month (January, April, July, October)
$isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10], true);
$this->logger->info(self::LOG_PREFIX . ' Checking conditions', [
'isMonday' => $isMonday,
'isFirstDayOfMonth' => $isFirstDayOfMonth,
'currentMonth' => $currentMonth,
'isQuarterlyMonth' => $isQuarterlyMonth,
]);
// Process daily reports
$this->processReports(AutomatedReportsService::FREQUENCY_DAILY);
// Process weekly reports on Mondays
if ($isMonday) {
$this->processReports(AutomatedReportsService::FREQUENCY_WEEKLY);
}
// Process monthly reports on the first day of the month
if ($isFirstDayOfMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_MONTHLY);
}
// Process quarterly reports on the first day of January, April, July, and October
if ($isFirstDayOfMonth && $isQuarterlyMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_QUARTERLY);
}
$this->logger->info(self::LOG_PREFIX . ' Completed');
return 0;
}
/**
* Process reports for a specific frequency.
*
* @param string $frequency
*
* @return void
*/
private function processReports(string $frequency): void
{
$this->logger->info(self::LOG_PREFIX . " Processing $frequency reports");
$reportId = $this->option('report-id');
if ($reportId !== null) {
$reports = $this->getReportById($reportId);
} else {
// Get all enabled, not deleted reports with active teams for the specified frequency
$reports = $this->reportRepository->getActiveReportsByFrequency($frequency);
}
$this->logger->info(self::LOG_PREFIX . " Found {$reports->count()} $frequency reports to process");
/** @var AutomatedReport $report */
foreach ($reports as $report) {
$this->logger->info(self::LOG_PREFIX . ' Dispatching Generate Report job for report', [
'reportUuid' => $report->getUuid(),
'teamId' => $report->getTeamId(),
'frequency' => $report->getFrequency(),
'type' => $report->getType(),
]);
$job = $report->isAskJiminnyReport()
? new RequestGenerateAskJiminnyReportJob($report->getUuid())
: new RequestGenerateReportJob($report->getUuid());
$this->dispatcher->dispatch($job);
}
}
private function getReportById(string $reportId): Collection
{
$report = $this->reportRepository->findByIdOrUuid($reportId);
if ($report === null) {
$this->logger->warning(self::LOG_PREFIX . ' Report not found for --report-id', ['reportId' => $reportId]);
$this->warn("Report not found: {$reportId}");
return collect();
}
if (! $report->getStatus()) {
$this->logger->warning(self::LOG_PREFIX . ' Report is inactive, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
]);
$this->warn('Report is inactive — processing anyway (manual override).');
}
$team = $report->getTeam();
if ($team->getStatus() !== Team::STATUS_ACTIVE) {
$this->logger->warning(self::LOG_PREFIX . ' Team is not active, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
'teamId' => $report->getTeamId(),
'teamStatus' => $team->getStatus(),
]);
$this->warn("Team #{$report->getTeamId()} is not active — processing anyway (manual override).");
}
if ($report->isExpired()) {
$this->logger->warning(self::LOG_PREFIX . ' Report is expired, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
'expiresAt' => $report->getExpiresAt()?->toDateString(),
]);
$this->warn('Report is expired (expires_at: ' . $report->getExpiresAt()?->toDateString() . ') — processing anyway (manual override).');
}
$this->info(self::LOG_PREFIX . ' Automated report found ' . $report->getCustomName());
return collect([$report]);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny","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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AutomatedReportsCommandTest","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AutomatedReportsCommandTest'","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AutomatedReportsCommandTest'","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"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},"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},"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},"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},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"17","depth":4,"role_description":"text"},{"role":"AXStaticText","text":"15","depth":4,"role_description":"text"},{"role":"AXStaticText","text":"13","depth":4,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT * FROM teams WHERE id = 1;\n\nselect * from crm_layouts where crm_configuration_id = 39;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 283;\nSELECT * FROM crm_fields WHERE id = 2234;\nSELECT * FROM crm_field_values WHERE crm_field_id = 2234;\n\nselect * from crm_profiles where user_id = 143;\n\nselect * from record_types where crm_configuration_id = 39; # 0121K000001MHElQAO,0121K000001MHEqQAO\nselect * from business_processes where crm_configuration_id = 39;\n# 01941000000H669AAC, 01941000000H66JAAS\n\nselect * from record_type_field_values\n where record_type_id IN (24);\n\nselect * from crm_field_values where id IN (2730);\n\nselect * from crm_configurations where id = 39;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 1\nand sa.provider = 'salesforce'; #1035\n\n\nselect * from users where team_id = 1; # 222 group 3\nSELECT * FROM activities WHERE user_id = 222 order by id desc;\nselect * from sidekick_settings where team_id = 1;\nselect * from teams where id = 1;\nselect * from team_features where team_id = 1;\n\nselect * from activities where crm_configuration_id = 2\nand provider = 'ms-teams' and id = 608765;\n\nSELECT * FROM activities WHERE crm_configuration_id = 2 and crm_provider_id = '59523413338';\n\nselect * from sidekick_settings where team_id = 2;\n\nSELECT * FROM activities WHERE id = 608660;\nselect * from activity_summary_logs where activity_id = 608660;\nselect * from ai_prompts where transcription_id = 11214;\n\n# ********************************************************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('ed78a437-2804-450e-ab2f-56ab1c641346') = uuid;\n# id: 608818, crm: 59628809737\nSELECT * FROM activities WHERE uuid_to_bin('36b06e55-afdd-4782-8dee-c624cd0af191') = uuid;\n# id: 608821, crm: 59632069252\nSELECT ce.start_time, ce.end_time, a.id, a.uuid, crm_provider_id, calendar_event_id, title,\nplaybook_category_id, user_id, lead_id, contact_id, account_id, opportunity_id,\nscheduled_start_time, scheduled_end_time, actual_start_time, actual_end_time, a.created_at\nFROM activities a\njoin calendar_events ce on a.calendar_event_id = ce.id\nWHERE a.id IN (608818, 608821);\n\nselect * from users where team_id = 1;\nselect * from team_settings where team_id = 1;\nselect * from crm_profiles where crm_configuration_id = 39 order by user_id;\n\nselect * from team_features where team_id = 1;\n\nselect * from users where team_id = 2;\n\nSELECT * FROM activities WHERE uuid_to_bin('ec7647e9-5225-458b-b475-f31aa2769204') = uuid; # 612639\n# Preslava N. Ivanova, grou id 3\n\nSELECT * FROM opportunities WHERE uuid_to_bin('a2928fe5-aec5-46cb-85d9-7654c89e46a6') = uuid;\n\nselect * from activities where opportunity_id = 344 and actual_start_time between '2024-10-11 00:00:00' and '2024-10-12 00:00:00';\n\nselect\n a.id,\n a.type,\n a.scheduled_start_time,\n a.actual_start_time,\n a.created_at,\n a.opportunity_id,\n a.status\nFROM activities a\nWHERE opportunity_id = 344\nand status IN ('completed', 'received', 'delivered')\nand (\n (a.actual_start_time between '2024-10-11 00:00:00' and '2024-10-12 00:00:00')\nOR (a.created_at between '2024-10-11 00:00:00' and '2024-10-12 00:00:00')\nOR (a.scheduled_start_time between '2024-10-11 00:00:00' and '2024-10-12 00:00:00'))\n;\n\nSELECT * FROM users WHERE id = 222;\n\nSELECT * FROM crm_profiles WHERE user_id = 222;\nselect * from crm_layouts where crm_configuration_id = 39;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 281;\n\nselect * from group_deal_risk_types;\n\nselect * from opportunities where team_id = 1;\n\nSELECT * FROM opportunities WHERE id = 315;\nSELECT * FROM crm_field_data WHERE object_id = 315;\nselect * from crm_field_data where object_id = 260;\n\nselect * from generic_ai_prompts where subject_id = 315;\n\nselect * from teams; # 36, 21, 121, james.graham@bullhorn.jiminny.com\nSELECT * FROM social_accounts WHERE sociable_id = 121 and provider = 'bullhorn';\n\n# ************************************************************************************\nselect * from teams where id = 1;\nselect * from crm_configurations where id = 39;\nselect * from users where team_id = 1;\nselect u.email, cp.* from users u\njoin crm_profiles cp on u.id = cp.user_id\nwhere u.team_id = 1;\n# 1 - 00541000004281rAAA\n# 204 - 0052g000003freeAAA\n# 429 - 0052g000003qGOiAAM\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 1\nand sa.provider = 'salesforce';\n\nselect * from activities where type = 'softphone'\nand created_at > '2024-12-11 15:24:36' order by id desc;\n\nselect * from activity_providers where team_id = 1;\nselect * from activity_provider_users where activity_provider_id = 328;\n\nselect * from opportunities where crm_configuration_id = 39\nAND account_id = 178 AND is_closed = false\norder by created_at DESC;\n\nselect * from contacts where id = 3952;\nselect * from accounts where id = 178;\n\n# ************************************************************************************\nselect * from teams where id = 36;\nselect * from crm_configurations where id = 21;\nselect * from users where team_id = 36;\nselect u.email, cp.* from users u\njoin crm_profiles cp on u.id = cp.user_id\nwhere u.team_id = 36;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 36\nand sa.provider = 'bullhorn';\n\nselect * from social_accounts where id = 348;\nUPDATE social_accounts SET\nprovider_user_token = '21442_6802599_91:41179a58-21e7-4d7c-ad58-56bb666b2f65',\nprovider_refresh_token = '21442_6802599_91:01c6b335-3f2a-42e4-85ff-8a08fa65fceb',\nexpires = 1733998131,\nstate = 'connected'\nWHERE id = 348;\n\n# ************************************************************************************\nselect * from teams where id = 31;\nselect * from crm_configurations where id = 18;\n\nselect * from users where team_id = 31; # 257\nselect u.email, cp.* from users u\njoin crm_profiles cp on u.id = cp.user_id\nwhere u.team_id = 31;\n\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 31\nand sa.provider = 'close';\n\nselect * from contacts where crm_configuration_id = 18;\n\n# ********************** NEPTUNE **************************************************************\nselect * from teams;\nselect * from users where id IN (1030, 1035, 1052);\nselect * from crm_configurations;\n\nselect * from users where team_id = 65; # 257\nselect * from team_settings where team_id = 65; # 257\nselect * from invitations where team_id = 65; # 257\nselect * from users where email = 'integration-account@jiminny.com'; # 257\nselect u.email, cp.* from users u\njoin crm_profiles cp on u.id = cp.user_id\nwhere u.team_id = 65;\n\nselect * from crm_configurations where id = 53;\nselect * from accounts where crm_configuration_id = 53 order by id desc;\nselect * from leads where crm_configuration_id = 53 order by id desc;\nselect * from contacts where crm_configuration_id = 53 order by id desc;\nselect * from opportunities where crm_configuration_id = 53 order by id desc;\nselect * from crm_profiles where crm_configuration_id = 53 order by id desc;\nselect * from crm_fields where crm_configuration_id = 53 order by id desc;\nselect * from crm_field_values where crm_field_id = 3341 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 53 order by id desc;\nselect * from stages where crm_configuration_id = 53 order by id desc;\n\n\nselect * from crm_profiles where crm_configuration_id = 13;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 65\nand sa.provider = 'integration-app';\n\nselect * from contacts where crm_configuration_id = 13;\n\nselect * from social_accounts where sociable_id = 283;\n\nSELECT * FROM opportunities WHERE crm_provider_id = '006O400000E9bzeIAB';\n\nselect * from activity_providers where team_id = 65;\nSELECT * FROM activities WHERE crm_configuration_id IN (51, 52, 53);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 65\n;\n\n# ***************************** STAGING ********************************************\nSELECT * FROM teams;\nSELECT * FROM teams WHERE id = 88;\nSELECT * FROM teams WHERE id = 89;\nselect * from team_settings where team_id = 89;\nSELECT * FROM users WHERE team_id = 89;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 89;\n\nselect * from users;\nSELECT * FROM social_accounts WHERE sociable_id = 1761;\nSELECT * FROM crm_configurations WHERE id = 70;\nselect * from accounts where crm_configuration_id = 70 order by id desc;\nselect * from leads where crm_configuration_id = 70 order by id desc;\nselect * from contacts where crm_configuration_id = 70 order by id desc;\nselect * from opportunities where crm_configuration_id = 70 order by id desc;\nselect * from crm_profiles where crm_configuration_id = 70 order by id desc;\nselect * from crm_fields where crm_configuration_id = 70 order by id desc;\nselect * from crm_field_values where crm_field_id = 3536 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 70 order by id desc;\nselect * from stages where crm_configuration_id = 70 order by id desc;\nselect * from business_processes where crm_configuration_id = 70 order by id desc;\nselect * from business_process_stages where business_process_id = 34;\n\nselect * from contacts where id = 10468;\n\nselect * from crm_layouts where crm_configuration_id = 70;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 388;\nSELECT * FROM crm_fields WHERE id IN (3533,3534,3535);\n\nselect * from activities where crm_configuration_id = 70\nand (account_id IS NOT NULL or lead_id IS NOT NULL or contact_id IS NOT NULL or opportunity_id IS NOT NULL) order by id desc;\n\nSELECT * FROM activities WHERE uuid_to_bin('2e10b60f-8a61-41c5-a3d4-28835353dc65') = uuid;\nSELECT * FROM activities where crm_configuration_id = 69 ;\n\nSELECT * FROM users WHERE email LIKE '%jiminny_web_sa2@jiminny.com%';\nSELECT * FROM activities WHERE uuid_to_bin('5a150c93-40fc-42ec-b3bd-c1d328e09f6e') = uuid;\nSELECT * FROM opportunities WHERE id = 385;\n\nselect * from participants p\njoin activities a on p.activity_id = a.id\nwhere a.crm_configuration_id = 70\nand (p.lead_id IS NOT NULL or p.contact_id IS NOT NULL);\nSELECT * FROM participants WHERE id = 1013638;\n\nselect * from teams where id = 90;\nselect * from users where team_id = 90;\nselect * from social_accounts where social_accounts.sociable_id IN (1960,1760);\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 71;\nselect * from invitations where team_id = 90;\n\nselect * from crm_configurations where id = 71;\nselect * from accounts where crm_configuration_id = 71 order by id desc;\nselect * from leads where crm_configuration_id = 71 order by id desc;\nselect * from contacts where crm_configuration_id = 71 order by id desc;\nselect * from opportunities where crm_configuration_id = 71 order by id desc;\nselect * from crm_profiles where crm_configuration_id = 71 order by id desc;\nselect * from crm_fields where crm_configuration_id = 71 order by id desc;\nselect * from crm_field_values where crm_field_id = 3341 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 71 order by id desc;\nselect * from stages where crm_configuration_id = 71 order by id desc;\n\nselect * from users order by secondary_email desc;\nselect u.id, u.email, u.status, sa.id, sa.provider_user_id from social_accounts sa\n join users u on sa.sociable_id = u.id\nwhere sa.provider = 'google' and u.email LIKE 'aneliya%';\n\nselect * from failed_jobs order by id desc;\n\nselect * from users where email = 'ben.allwright@learningpeople.co.uk' or secondary_email = 'ben.allwright@learningpeople.co.uk';\n\nselect * from teams;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 39;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 39 and object_type = 'task';\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 1\nand sa.provider = 'salesforce';\n\n# ************************************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('c38b3895-fd0f-4b1f-9fb2-c170dba137c6') = uuid;\nSELECT * FROM crm_configurations WHERE id = 70;\n\nselect * from teams where id = 1;\nselect * from groups where team_id = 1;\nselect * from users where team_id = 1;\n\nselect o.id, o.name,o.close_date, u.id, u.name, u.group_id, r.id, r.display_name, g.name, g.scope from opportunities o\njoin users u on o.user_id = u.id\njoin groups g on u.group_id = g.id\njoin role_user ru on u.id = ru.user_id\njoin roles r on ru.role_id = r.id\nwhere o.crm_configuration_id = 39 and close_date > '2024-01-01 00:00:00';\n\nselect * from role_user where user_id = 143;\nselect * from roles;\n\nselect * from role_user;\nselect * from groups where id = 9;\nselect * from scope_groups where group_id = 9;\n\n# ************************************************************************************\nselect * from teams where id = 36;\nselect * from crm_configurations;\nSELECT * FROM social_accounts WHERE sociable_id = 121;\n\nhttps://crmsandbox.zoho.com/crm/jiminnyw4/tab/Leads/4776201000005049105\nhttps://crmsandbox.zoho.com/crm/\n\nhttps://crm.zoho.com/crm/org3469620/tab/Leads/230045000229559080\n https://crm.zoho.com/crm/\n org3469620\n\nSELECT * FROM activities WHERE uuid_to_bin('03382d20-c8bc-48e7-a3d4-90b52fa5ceab') = uuid;\n\nselect * from users where email LIKE \"%mobile_automation_%\";\nselect * from social_accounts where sociable_id IN (2228);\nselect * from crm_profiles where user_id IN (2222,2223,2226,2227);\n\nselect * from teams order by id desc;\nSELECT * FROM users WHERE id = 2229;\nSELECT * FROM crm_profiles WHERE user_id = 2229;\nselect * from opportunities where crm_configuration_id = 88;\nselect * from crm_fields where crm_configuration_id = 88;\nselect * from crm_profiles where crm_configuration_id = 88;\n\nSELECT * FROM teams WHERE id = 1;\n\nSELECT * FROM users WHERE id = 143;\nSELECT * FROM users WHERE uuid_to_bin('fde193d3-06a2-4e1a-8895-62b94039215d') = uuid;\nSELECT * FROM teams WHERE uuid_to_bin('73385071-a756-42ae-9c73-8b53f2309467') = uuid;\n\nhttps://app.staging.jiminny.com/ondemand?\n min_duration=1\n &\n only_recorded=1\n &\n user_id%5B%5D=641f1acb-16b8-42d1-8726-df52979dad0e\n &\n sequence_number=2\n\n select * from users where team_id = 1 and email like '%stoyan%'\n\nselect * from coaching_feedbacks;\n\nselect * from teams;\nSELECT * FROM users WHERE team_id = 36;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 19\nand sa.provider = 'pipedrive';\n\nselect * from users where id = 143;\n\nSELECT * FROM users WHERE uuid_to_bin('73180eeb-33de-4065-977d-ccbe0e6c94fc') = uuid;\nSELECT * FROM teams WHERE uuid_to_bin('73180eeb-33de-4065-977d-ccbe0e6c94fc') = uuid;\nSELECT * FROM activity_shares WHERE uuid_to_bin('73180eeb-33de-4065-977d-ccbe0e6c94fc') = uuid;\n\nselect * from users where team_id = 2;\nselect * from activities where crm_configuration_id = 39\nand activities.scheduled_start_time BETWEEN '2025-04-09 00:00:00' AND '2025-04-09 23:59:59'\nAND user_id = 143\norder by id desc;\n\n# ************************************************************************************\nselect * from teams where id = 142; # 2312, 126\nselect * from team_settings;\nselect * from users where team_id = 142; # 21642\nSELECT * FROM social_accounts WHERE sociable_id = 21642;\nSELECT * FROM crm_profiles cp join users u ON u.id = cp.user_id WHERE team_id = 142;\nselect * from crm_profiles where id IN (93);\nselect * from invitations;\nselect * from team_features where team_id = 1;\n\nSELECT * FROM crm_configurations WHERE id = 126;\nselect * from accounts where crm_configuration_id = 126 order by id desc;\nselect * from leads where crm_configuration_id = 126 order by id desc;\nselect * from contacts where crm_configuration_id = 126 order by id desc;\nselect * from opportunities where crm_configuration_id = 126 order by id desc;\nselect * from crm_profiles where crm_configuration_id = 126 order by id desc;\nselect * from crm_fields where crm_configuration_id = 126 # 11060\n# and type IN ('picklist', 'status')\n# and object_type = 'task'\norder by id desc;\n# 5731,5732,5733\nselect DISTINCT crm_field_id from crm_field_values where crm_field_id IN (11151,12239,12215,12185,12175,12165,12144,12137,12127,12109,12107,12105,12103,12092,12037,12005,12003,11987,11969,11958,11951,11942,11931,11924,11921,11917,11915,11901,11893,11883,11872,11870,11868,11866,11839,11833,11821,11793,11780,11777,11769,11757,11737,11735,11656,11645,11638,11629,11618,11611,11602,11591,11584,11581,11558,11544,11543,11534,11532,11529,11527,11503,11497,11493,11488,11470,11468,11457,11455,11397,11387,11372,11363,11348,11323,11318,11309,11301,11300,11292,11290,11286,11284,11256,11252,11242,11237,11233,11219,11176,11160) order by id desc;\nselect * from crm_layouts where crm_configuration_id = 126 order by id desc;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id in (300,299,298);\nselect * from stages where crm_configuration_id = 126 order by id desc;\nselect * from business_processes where crm_configuration_id = 126 order by id desc;\nselect * from business_process_stages where business_process_id IN (76,75,74,73);\nselect * from playbooks where team_id = 142;\nselect * from playbook_layouts where playbook_id IN (108);\nSELECT * FROM playbook_categories WHERE playbook_id IN (108);\n\nselect * from teams where id = 130;\nSELECT * FROM social_accounts WHERE sociable_id = 2291;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 2\nand sa.provider = 'hubspot';\n\nSELECT * FROM activities\n WHERE crm_configuration_id = 110;\n\nselect * from teams;\nselect * from crm_configurations;\n\nSELECT * FROM activities WHERE id = 628773;\nSELECT * FROM crm_profiles WHERE user_id = 1460;\nSELECT * FROM social_accounts WHERE sociable_id = 2291;\n\nselect * from teams;\nselect ru.*, pr.*, p.* from users u join role_user ru on ru.user_id = u.id\njoin permission_role pr on pr.role_id = ru.role_id\n join permissions p on p.id = pr.permission_id\nwhere team_id = 495 and p.name IN ('dial');\n\nselect * from teams where id = 145;\nselect * from crm_configurations where id = 129;\nselect * from social_accounts where sociable_id = 2317;\nSELECT * FROM activities WHERE uuid_to_bin('8dbab184-a333-4268-ad57-fb41f8d53a9a') = uuid;\n\nselect * from teams where id = 1;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 39;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 280;\nSELECT * FROM crm_layout_entities WHERE id = 5507;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 39 and object_type IN ('event');\n\nselect * from teams;\nselect * from activities where crm_configuration_id = 14;\n\nSELECT * FROM social_accounts where provider = 'copper';\n\nselect * from activities where id = 628467;\nselect * from participants where activity_id = 628467;\n\nSELECT * FROM contacts WHERE id = 3969;\nSELECT * FROM accounts WHERE id = 177;\n\nSELECT * FROM activities WHERE uuid_to_bin('4eb54c77-cfa3-2bd4-84a7-9ed46a21c988') = uuid;\n\n# ********************* BH\nselect * from teams where id = 36;\nSELECT * FROM crm_configurations WHERE id = 21;\nselect * from activities where crm_configuration_id = 21 and id = 607901;\nselect * from activities where crm_configuration_id = 21;\n\nselect * roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 226;\n\nselect * from migrations order by id desc;\n\n# mercury\n# neptune\n# earth\n\nselect * from teams;\nselect * from teams where id = 19;\nselect * from teams where id = 27;\nselect * from users where team_id = 27;\nSELECT * FROM crm_configurations WHERE id = 42;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 19\nand sa.provider = 'pipedrive';\n\nselect * from activities where id = 631461;\nSELECT * FROM crm_field_values WHERE crm_field_id = 180;\n\nselect * from teams where id = 2;\nSELECT * FROM social_accounts WHERE sociable_id = 89;\n\nSELECT * FROM activities WHERE uuid_to_bin('ba0c029a-bc14-4e17-8603-64174acebcbb') = uuid; # 634273\nselect * from activity_summary_logs where activity_id = 634273;\n\nselect * from sidekick_settings where team_id = 2;\n\nselect * from teams; # 2, 2\nSELECT * FROM crm_configurations WHERE team_id = 2; # 2\nselect * from team_features where team_id = 2;\nselect * from features;\nSELECT * FROM opportunities WHERE crm_configuration_id = 2 and crm_provider_id = '51317301383';\nSELECT * FROM opportunities WHERE crm_configuration_id = 2 order by id desc;\n\nselect * from automated_reports order by id desc;\nselect * from automated_report_results order by id desc;\nselect * from users where team_id = 1 and id IN (7160, 3248);\nselect * from migrations order by id desc;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1 and sa.provider = 'salesforce';\n\nselect * from teams where id = 1;\nselect * from groups g JOIN playbooks p on g.playbook_id = p.id where g.team_id = 1;\nselect * from groups where id = 565;\nselect * from playbooks where team_id = 1;\nselect * from playbooks where id = 175;\nselect * from playbook_categories where playbook_id = 175;\nselect * from users where team_id = 1;\nselect * from users where id = 7160;\nselect * from crm_profiles where user_id = 7160;\nselect * from features;\nselect\n *\n# id, uuid, type, provider, playbook_category_id, user_id, lead_id, contact_id, account_id, opportunity_id, stage_id,\n# crm_configuration_id, crm_provider_id, transcription_id, status\nfrom activities where crm_configuration_id = 1 and type = 'conference'\n# and crm_provider_id IS NOT NULL\nand provider != 'uploader' and actual_start_time IS NOT NULL\nORDER by id desc;\nselect * from activities where id = 54747783; # 00UO400000pCzojMAC\n\nselect p.id, p.activity_type, pc.id, pc.name\nFROM playbooks p\njoin playbook_categories pc on p.id = pc.playbook_id\nwhere p.team_id = 1 and p.activity_type = 'event';\n\nSELECT * FROM crm_fields WHERE crm_configuration_id = 1 and object_type = 'event';\nSELECT * FROM crm_field_values WHERE crm_field_id = 4;\n\nselect * from crm_layouts cl join playbook_layouts pl on cl.id = pl.layout_id\nwhere crm_configuration_id = 1 and pl.playbook_id = 175;\n\nselect * from teams;\nSELECT r.* FROM automated_reports r\njoin teams t on r.team_id = t.id\nWHERE r.frequency = 'daily'\n and r.status = 1\nAND t.status = 'active'\nAND (r.expires_at >= now() OR r.expires_at IS NULL);\n\nselect * from automated_report_results where report_id IN (18, 33);\n\nselect * from activity_searches where id = 10932;\nselect * from activity_search_filters where activity_search_id = 10932;\nselect * from automated_reports order by id desc;\nselect * from automated_report_results order by id desc;\nselect * from automated_report_results where report_id IN (36);","depth":4,"value":"SELECT * FROM teams WHERE id = 1;\n\nselect * from crm_layouts where crm_configuration_id = 39;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 283;\nSELECT * FROM crm_fields WHERE id = 2234;\nSELECT * FROM crm_field_values WHERE crm_field_id = 2234;\n\nselect * from crm_profiles where user_id = 143;\n\nselect * from record_types where crm_configuration_id = 39; # 0121K000001MHElQAO,0121K000001MHEqQAO\nselect * from business_processes where crm_configuration_id = 39;\n# 01941000000H669AAC, 01941000000H66JAAS\n\nselect * from record_type_field_values\n where record_type_id IN (24);\n\nselect * from crm_field_values where id IN (2730);\n\nselect * from crm_configurations where id = 39;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 1\nand sa.provider = 'salesforce'; #1035\n\n\nselect * from users where team_id = 1; # 222 group 3\nSELECT * FROM activities WHERE user_id = 222 order by id desc;\nselect * from sidekick_settings where team_id = 1;\nselect * from teams where id = 1;\nselect * from team_features where team_id = 1;\n\nselect * from activities where crm_configuration_id = 2\nand provider = 'ms-teams' and id = 608765;\n\nSELECT * FROM activities WHERE crm_configuration_id = 2 and crm_provider_id = '59523413338';\n\nselect * from sidekick_settings where team_id = 2;\n\nSELECT * FROM activities WHERE id = 608660;\nselect * from activity_summary_logs where activity_id = 608660;\nselect * from ai_prompts where transcription_id = 11214;\n\n# ********************************************************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('ed78a437-2804-450e-ab2f-56ab1c641346') = uuid;\n# id: 608818, crm: 59628809737\nSELECT * FROM activities WHERE uuid_to_bin('36b06e55-afdd-4782-8dee-c624cd0af191') = uuid;\n# id: 608821, crm: 59632069252\nSELECT ce.start_time, ce.end_time, a.id, a.uuid, crm_provider_id, calendar_event_id, title,\nplaybook_category_id, user_id, lead_id, contact_id, account_id, opportunity_id,\nscheduled_start_time, scheduled_end_time, actual_start_time, actual_end_time, a.created_at\nFROM activities a\njoin calendar_events ce on a.calendar_event_id = ce.id\nWHERE a.id IN (608818, 608821);\n\nselect * from users where team_id = 1;\nselect * from team_settings where team_id = 1;\nselect * from crm_profiles where crm_configuration_id = 39 order by user_id;\n\nselect * from team_features where team_id = 1;\n\nselect * from users where team_id = 2;\n\nSELECT * FROM activities WHERE uuid_to_bin('ec7647e9-5225-458b-b475-f31aa2769204') = uuid; # 612639\n# Preslava N. Ivanova, grou id 3\n\nSELECT * FROM opportunities WHERE uuid_to_bin('a2928fe5-aec5-46cb-85d9-7654c89e46a6') = uuid;\n\nselect * from activities where opportunity_id = 344 and actual_start_time between '2024-10-11 00:00:00' and '2024-10-12 00:00:00';\n\nselect\n a.id,\n a.type,\n a.scheduled_start_time,\n a.actual_start_time,\n a.created_at,\n a.opportunity_id,\n a.status\nFROM activities a\nWHERE opportunity_id = 344\nand status IN ('completed', 'received', 'delivered')\nand (\n (a.actual_start_time between '2024-10-11 00:00:00' and '2024-10-12 00:00:00')\nOR (a.created_at between '2024-10-11 00:00:00' and '2024-10-12 00:00:00')\nOR (a.scheduled_start_time between '2024-10-11 00:00:00' and '2024-10-12 00:00:00'))\n;\n\nSELECT * FROM users WHERE id = 222;\n\nSELECT * FROM crm_profiles WHERE user_id = 222;\nselect * from crm_layouts where crm_configuration_id = 39;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 281;\n\nselect * from group_deal_risk_types;\n\nselect * from opportunities where team_id = 1;\n\nSELECT * FROM opportunities WHERE id = 315;\nSELECT * FROM crm_field_data WHERE object_id = 315;\nselect * from crm_field_data where object_id = 260;\n\nselect * from generic_ai_prompts where subject_id = 315;\n\nselect * from teams; # 36, 21, 121, james.graham@bullhorn.jiminny.com\nSELECT * FROM social_accounts WHERE sociable_id = 121 and provider = 'bullhorn';\n\n# ************************************************************************************\nselect * from teams where id = 1;\nselect * from crm_configurations where id = 39;\nselect * from users where team_id = 1;\nselect u.email, cp.* from users u\njoin crm_profiles cp on u.id = cp.user_id\nwhere u.team_id = 1;\n# 1 - 00541000004281rAAA\n# 204 - 0052g000003freeAAA\n# 429 - 0052g000003qGOiAAM\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 1\nand sa.provider = 'salesforce';\n\nselect * from activities where type = 'softphone'\nand created_at > '2024-12-11 15:24:36' order by id desc;\n\nselect * from activity_providers where team_id = 1;\nselect * from activity_provider_users where activity_provider_id = 328;\n\nselect * from opportunities where crm_configuration_id = 39\nAND account_id = 178 AND is_closed = false\norder by created_at DESC;\n\nselect * from contacts where id = 3952;\nselect * from accounts where id = 178;\n\n# ************************************************************************************\nselect * from teams where id = 36;\nselect * from crm_configurations where id = 21;\nselect * from users where team_id = 36;\nselect u.email, cp.* from users u\njoin crm_profiles cp on u.id = cp.user_id\nwhere u.team_id = 36;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 36\nand sa.provider = 'bullhorn';\n\nselect * from social_accounts where id = 348;\nUPDATE social_accounts SET\nprovider_user_token = '21442_6802599_91:41179a58-21e7-4d7c-ad58-56bb666b2f65',\nprovider_refresh_token = '21442_6802599_91:01c6b335-3f2a-42e4-85ff-8a08fa65fceb',\nexpires = 1733998131,\nstate = 'connected'\nWHERE id = 348;\n\n# ************************************************************************************\nselect * from teams where id = 31;\nselect * from crm_configurations where id = 18;\n\nselect * from users where team_id = 31; # 257\nselect u.email, cp.* from users u\njoin crm_profiles cp on u.id = cp.user_id\nwhere u.team_id = 31;\n\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 31\nand sa.provider = 'close';\n\nselect * from contacts where crm_configuration_id = 18;\n\n# ********************** NEPTUNE **************************************************************\nselect * from teams;\nselect * from users where id IN (1030, 1035, 1052);\nselect * from crm_configurations;\n\nselect * from users where team_id = 65; # 257\nselect * from team_settings where team_id = 65; # 257\nselect * from invitations where team_id = 65; # 257\nselect * from users where email = 'integration-account@jiminny.com'; # 257\nselect u.email, cp.* from users u\njoin crm_profiles cp on u.id = cp.user_id\nwhere u.team_id = 65;\n\nselect * from crm_configurations where id = 53;\nselect * from accounts where crm_configuration_id = 53 order by id desc;\nselect * from leads where crm_configuration_id = 53 order by id desc;\nselect * from contacts where crm_configuration_id = 53 order by id desc;\nselect * from opportunities where crm_configuration_id = 53 order by id desc;\nselect * from crm_profiles where crm_configuration_id = 53 order by id desc;\nselect * from crm_fields where crm_configuration_id = 53 order by id desc;\nselect * from crm_field_values where crm_field_id = 3341 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 53 order by id desc;\nselect * from stages where crm_configuration_id = 53 order by id desc;\n\n\nselect * from crm_profiles where crm_configuration_id = 13;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 65\nand sa.provider = 'integration-app';\n\nselect * from contacts where crm_configuration_id = 13;\n\nselect * from social_accounts where sociable_id = 283;\n\nSELECT * FROM opportunities WHERE crm_provider_id = '006O400000E9bzeIAB';\n\nselect * from activity_providers where team_id = 65;\nSELECT * FROM activities WHERE crm_configuration_id IN (51, 52, 53);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 65\n;\n\n# ***************************** STAGING ********************************************\nSELECT * FROM teams;\nSELECT * FROM teams WHERE id = 88;\nSELECT * FROM teams WHERE id = 89;\nselect * from team_settings where team_id = 89;\nSELECT * FROM users WHERE team_id = 89;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 89;\n\nselect * from users;\nSELECT * FROM social_accounts WHERE sociable_id = 1761;\nSELECT * FROM crm_configurations WHERE id = 70;\nselect * from accounts where crm_configuration_id = 70 order by id desc;\nselect * from leads where crm_configuration_id = 70 order by id desc;\nselect * from contacts where crm_configuration_id = 70 order by id desc;\nselect * from opportunities where crm_configuration_id = 70 order by id desc;\nselect * from crm_profiles where crm_configuration_id = 70 order by id desc;\nselect * from crm_fields where crm_configuration_id = 70 order by id desc;\nselect * from crm_field_values where crm_field_id = 3536 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 70 order by id desc;\nselect * from stages where crm_configuration_id = 70 order by id desc;\nselect * from business_processes where crm_configuration_id = 70 order by id desc;\nselect * from business_process_stages where business_process_id = 34;\n\nselect * from contacts where id = 10468;\n\nselect * from crm_layouts where crm_configuration_id = 70;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 388;\nSELECT * FROM crm_fields WHERE id IN (3533,3534,3535);\n\nselect * from activities where crm_configuration_id = 70\nand (account_id IS NOT NULL or lead_id IS NOT NULL or contact_id IS NOT NULL or opportunity_id IS NOT NULL) order by id desc;\n\nSELECT * FROM activities WHERE uuid_to_bin('2e10b60f-8a61-41c5-a3d4-28835353dc65') = uuid;\nSELECT * FROM activities where crm_configuration_id = 69 ;\n\nSELECT * FROM users WHERE email LIKE '%jiminny_web_sa2@jiminny.com%';\nSELECT * FROM activities WHERE uuid_to_bin('5a150c93-40fc-42ec-b3bd-c1d328e09f6e') = uuid;\nSELECT * FROM opportunities WHERE id = 385;\n\nselect * from participants p\njoin activities a on p.activity_id = a.id\nwhere a.crm_configuration_id = 70\nand (p.lead_id IS NOT NULL or p.contact_id IS NOT NULL);\nSELECT * FROM participants WHERE id = 1013638;\n\nselect * from teams where id = 90;\nselect * from users where team_id = 90;\nselect * from social_accounts where social_accounts.sociable_id IN (1960,1760);\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 71;\nselect * from invitations where team_id = 90;\n\nselect * from crm_configurations where id = 71;\nselect * from accounts where crm_configuration_id = 71 order by id desc;\nselect * from leads where crm_configuration_id = 71 order by id desc;\nselect * from contacts where crm_configuration_id = 71 order by id desc;\nselect * from opportunities where crm_configuration_id = 71 order by id desc;\nselect * from crm_profiles where crm_configuration_id = 71 order by id desc;\nselect * from crm_fields where crm_configuration_id = 71 order by id desc;\nselect * from crm_field_values where crm_field_id = 3341 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 71 order by id desc;\nselect * from stages where crm_configuration_id = 71 order by id desc;\n\nselect * from users order by secondary_email desc;\nselect u.id, u.email, u.status, sa.id, sa.provider_user_id from social_accounts sa\n join users u on sa.sociable_id = u.id\nwhere sa.provider = 'google' and u.email LIKE 'aneliya%';\n\nselect * from failed_jobs order by id desc;\n\nselect * from users where email = 'ben.allwright@learningpeople.co.uk' or secondary_email = 'ben.allwright@learningpeople.co.uk';\n\nselect * from teams;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 39;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 39 and object_type = 'task';\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 1\nand sa.provider = 'salesforce';\n\n# ************************************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('c38b3895-fd0f-4b1f-9fb2-c170dba137c6') = uuid;\nSELECT * FROM crm_configurations WHERE id = 70;\n\nselect * from teams where id = 1;\nselect * from groups where team_id = 1;\nselect * from users where team_id = 1;\n\nselect o.id, o.name,o.close_date, u.id, u.name, u.group_id, r.id, r.display_name, g.name, g.scope from opportunities o\njoin users u on o.user_id = u.id\njoin groups g on u.group_id = g.id\njoin role_user ru on u.id = ru.user_id\njoin roles r on ru.role_id = r.id\nwhere o.crm_configuration_id = 39 and close_date > '2024-01-01 00:00:00';\n\nselect * from role_user where user_id = 143;\nselect * from roles;\n\nselect * from role_user;\nselect * from groups where id = 9;\nselect * from scope_groups where group_id = 9;\n\n# ************************************************************************************\nselect * from teams where id = 36;\nselect * from crm_configurations;\nSELECT * FROM social_accounts WHERE sociable_id = 121;\n\nhttps://crmsandbox.zoho.com/crm/jiminnyw4/tab/Leads/4776201000005049105\nhttps://crmsandbox.zoho.com/crm/\n\nhttps://crm.zoho.com/crm/org3469620/tab/Leads/230045000229559080\n https://crm.zoho.com/crm/\n org3469620\n\nSELECT * FROM activities WHERE uuid_to_bin('03382d20-c8bc-48e7-a3d4-90b52fa5ceab') = uuid;\n\nselect * from users where email LIKE \"%mobile_automation_%\";\nselect * from social_accounts where sociable_id IN (2228);\nselect * from crm_profiles where user_id IN (2222,2223,2226,2227);\n\nselect * from teams order by id desc;\nSELECT * FROM users WHERE id = 2229;\nSELECT * FROM crm_profiles WHERE user_id = 2229;\nselect * from opportunities where crm_configuration_id = 88;\nselect * from crm_fields where crm_configuration_id = 88;\nselect * from crm_profiles where crm_configuration_id = 88;\n\nSELECT * FROM teams WHERE id = 1;\n\nSELECT * FROM users WHERE id = 143;\nSELECT * FROM users WHERE uuid_to_bin('fde193d3-06a2-4e1a-8895-62b94039215d') = uuid;\nSELECT * FROM teams WHERE uuid_to_bin('73385071-a756-42ae-9c73-8b53f2309467') = uuid;\n\nhttps://app.staging.jiminny.com/ondemand?\n min_duration=1\n &\n only_recorded=1\n &\n user_id%5B%5D=641f1acb-16b8-42d1-8726-df52979dad0e\n &\n sequence_number=2\n\n select * from users where team_id = 1 and email like '%stoyan%'\n\nselect * from coaching_feedbacks;\n\nselect * from teams;\nSELECT * FROM users WHERE team_id = 36;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 19\nand sa.provider = 'pipedrive';\n\nselect * from users where id = 143;\n\nSELECT * FROM users WHERE uuid_to_bin('73180eeb-33de-4065-977d-ccbe0e6c94fc') = uuid;\nSELECT * FROM teams WHERE uuid_to_bin('73180eeb-33de-4065-977d-ccbe0e6c94fc') = uuid;\nSELECT * FROM activity_shares WHERE uuid_to_bin('73180eeb-33de-4065-977d-ccbe0e6c94fc') = uuid;\n\nselect * from users where team_id = 2;\nselect * from activities where crm_configuration_id = 39\nand activities.scheduled_start_time BETWEEN '2025-04-09 00:00:00' AND '2025-04-09 23:59:59'\nAND user_id = 143\norder by id desc;\n\n# ************************************************************************************\nselect * from teams where id = 142; # 2312, 126\nselect * from team_settings;\nselect * from users where team_id = 142; # 21642\nSELECT * FROM social_accounts WHERE sociable_id = 21642;\nSELECT * FROM crm_profiles cp join users u ON u.id = cp.user_id WHERE team_id = 142;\nselect * from crm_profiles where id IN (93);\nselect * from invitations;\nselect * from team_features where team_id = 1;\n\nSELECT * FROM crm_configurations WHERE id = 126;\nselect * from accounts where crm_configuration_id = 126 order by id desc;\nselect * from leads where crm_configuration_id = 126 order by id desc;\nselect * from contacts where crm_configuration_id = 126 order by id desc;\nselect * from opportunities where crm_configuration_id = 126 order by id desc;\nselect * from crm_profiles where crm_configuration_id = 126 order by id desc;\nselect * from crm_fields where crm_configuration_id = 126 # 11060\n# and type IN ('picklist', 'status')\n# and object_type = 'task'\norder by id desc;\n# 5731,5732,5733\nselect DISTINCT crm_field_id from crm_field_values where crm_field_id IN (11151,12239,12215,12185,12175,12165,12144,12137,12127,12109,12107,12105,12103,12092,12037,12005,12003,11987,11969,11958,11951,11942,11931,11924,11921,11917,11915,11901,11893,11883,11872,11870,11868,11866,11839,11833,11821,11793,11780,11777,11769,11757,11737,11735,11656,11645,11638,11629,11618,11611,11602,11591,11584,11581,11558,11544,11543,11534,11532,11529,11527,11503,11497,11493,11488,11470,11468,11457,11455,11397,11387,11372,11363,11348,11323,11318,11309,11301,11300,11292,11290,11286,11284,11256,11252,11242,11237,11233,11219,11176,11160) order by id desc;\nselect * from crm_layouts where crm_configuration_id = 126 order by id desc;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id in (300,299,298);\nselect * from stages where crm_configuration_id = 126 order by id desc;\nselect * from business_processes where crm_configuration_id = 126 order by id desc;\nselect * from business_process_stages where business_process_id IN (76,75,74,73);\nselect * from playbooks where team_id = 142;\nselect * from playbook_layouts where playbook_id IN (108);\nSELECT * FROM playbook_categories WHERE playbook_id IN (108);\n\nselect * from teams where id = 130;\nSELECT * FROM social_accounts WHERE sociable_id = 2291;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 2\nand sa.provider = 'hubspot';\n\nSELECT * FROM activities\n WHERE crm_configuration_id = 110;\n\nselect * from teams;\nselect * from crm_configurations;\n\nSELECT * FROM activities WHERE id = 628773;\nSELECT * FROM crm_profiles WHERE user_id = 1460;\nSELECT * FROM social_accounts WHERE sociable_id = 2291;\n\nselect * from teams;\nselect ru.*, pr.*, p.* from users u join role_user ru on ru.user_id = u.id\njoin permission_role pr on pr.role_id = ru.role_id\n join permissions p on p.id = pr.permission_id\nwhere team_id = 495 and p.name IN ('dial');\n\nselect * from teams where id = 145;\nselect * from crm_configurations where id = 129;\nselect * from social_accounts where sociable_id = 2317;\nSELECT * FROM activities WHERE uuid_to_bin('8dbab184-a333-4268-ad57-fb41f8d53a9a') = uuid;\n\nselect * from teams where id = 1;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 39;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 280;\nSELECT * FROM crm_layout_entities WHERE id = 5507;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 39 and object_type IN ('event');\n\nselect * from teams;\nselect * from activities where crm_configuration_id = 14;\n\nSELECT * FROM social_accounts where provider = 'copper';\n\nselect * from activities where id = 628467;\nselect * from participants where activity_id = 628467;\n\nSELECT * FROM contacts WHERE id = 3969;\nSELECT * FROM accounts WHERE id = 177;\n\nSELECT * FROM activities WHERE uuid_to_bin('4eb54c77-cfa3-2bd4-84a7-9ed46a21c988') = uuid;\n\n# ********************* BH\nselect * from teams where id = 36;\nSELECT * FROM crm_configurations WHERE id = 21;\nselect * from activities where crm_configuration_id = 21 and id = 607901;\nselect * from activities where crm_configuration_id = 21;\n\nselect * roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 226;\n\nselect * from migrations order by id desc;\n\n# mercury\n# neptune\n# earth\n\nselect * from teams;\nselect * from teams where id = 19;\nselect * from teams where id = 27;\nselect * from users where team_id = 27;\nSELECT * FROM crm_configurations WHERE id = 42;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 19\nand sa.provider = 'pipedrive';\n\nselect * from activities where id = 631461;\nSELECT * FROM crm_field_values WHERE crm_field_id = 180;\n\nselect * from teams where id = 2;\nSELECT * FROM social_accounts WHERE sociable_id = 89;\n\nSELECT * FROM activities WHERE uuid_to_bin('ba0c029a-bc14-4e17-8603-64174acebcbb') = uuid; # 634273\nselect * from activity_summary_logs where activity_id = 634273;\n\nselect * from sidekick_settings where team_id = 2;\n\nselect * from teams; # 2, 2\nSELECT * FROM crm_configurations WHERE team_id = 2; # 2\nselect * from team_features where team_id = 2;\nselect * from features;\nSELECT * FROM opportunities WHERE crm_configuration_id = 2 and crm_provider_id = '51317301383';\nSELECT * FROM opportunities WHERE crm_configuration_id = 2 order by id desc;\n\nselect * from automated_reports order by id desc;\nselect * from automated_report_results order by id desc;\nselect * from users where team_id = 1 and id IN (7160, 3248);\nselect * from migrations order by id desc;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1 and sa.provider = 'salesforce';\n\nselect * from teams where id = 1;\nselect * from groups g JOIN playbooks p on g.playbook_id = p.id where g.team_id = 1;\nselect * from groups where id = 565;\nselect * from playbooks where team_id = 1;\nselect * from playbooks where id = 175;\nselect * from playbook_categories where playbook_id = 175;\nselect * from users where team_id = 1;\nselect * from users where id = 7160;\nselect * from crm_profiles where user_id = 7160;\nselect * from features;\nselect\n *\n# id, uuid, type, provider, playbook_category_id, user_id, lead_id, contact_id, account_id, opportunity_id, stage_id,\n# crm_configuration_id, crm_provider_id, transcription_id, status\nfrom activities where crm_configuration_id = 1 and type = 'conference'\n# and crm_provider_id IS NOT NULL\nand provider != 'uploader' and actual_start_time IS NOT NULL\nORDER by id desc;\nselect * from activities where id = 54747783; # 00UO400000pCzojMAC\n\nselect p.id, p.activity_type, pc.id, pc.name\nFROM playbooks p\njoin playbook_categories pc on p.id = pc.playbook_id\nwhere p.team_id = 1 and p.activity_type = 'event';\n\nSELECT * FROM crm_fields WHERE crm_configuration_id = 1 and object_type = 'event';\nSELECT * FROM crm_field_values WHERE crm_field_id = 4;\n\nselect * from crm_layouts cl join playbook_layouts pl on cl.id = pl.layout_id\nwhere crm_configuration_id = 1 and pl.playbook_id = 175;\n\nselect * from teams;\nSELECT r.* FROM automated_reports r\njoin teams t on r.team_id = t.id\nWHERE r.frequency = 'daily'\n and r.status = 1\nAND t.status = 'active'\nAND (r.expires_at >= now() OR r.expires_at IS NULL);\n\nselect * from automated_report_results where report_id IN (18, 33);\n\nselect * from activity_searches where id = 10932;\nselect * from activity_search_filters where activity_search_id = 10932;\nselect * from automated_reports order by id desc;\nselect * from automated_report_results order by id desc;\nselect * from automated_report_results where report_id IN (36);","role_description":"text entry area","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},"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},"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},"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},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"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\\Console\\Commands\\Reports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Bus\\Dispatcher as BusDispatcher;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateReportJob;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\n\nclass AutomatedReportsCommand extends Command\n{\n /**\n * Log prefix for all log messages\n */\n private const string LOG_PREFIX = '[automated-reports]';\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected $signature = 'automated-reports \n {--report-id= : Process a specific report by ID or UUID (bypasses frequency scheduling)}';\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly). \n Use --report-id to manually trigger a specific report by ID or UUID.';\n\n\n public function __construct(\n private readonly LoggerInterface $logger,\n private readonly BusDispatcher $dispatcher,\n private readonly AutomatedReportsRepository $reportRepository\n ) {\n parent::__construct();\n }\n\n /**\n * Execute the console command.\n *\n * @return int\n */\n public function handle(): int\n {\n $this->logger->info(self::LOG_PREFIX . ' Started');\n\n $now = Carbon::now();\n $isMonday = $now->isMonday();\n $isFirstDayOfMonth = $now->day === 1;\n $currentMonth = $now->month;\n\n // Check if the current month is a quarterly month (January, April, July, October)\n $isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10], true);\n\n $this->logger->info(self::LOG_PREFIX . ' Checking conditions', [\n 'isMonday' => $isMonday,\n 'isFirstDayOfMonth' => $isFirstDayOfMonth,\n 'currentMonth' => $currentMonth,\n 'isQuarterlyMonth' => $isQuarterlyMonth,\n ]);\n\n // Process daily reports\n $this->processReports(AutomatedReportsService::FREQUENCY_DAILY);\n\n // Process weekly reports on Mondays\n if ($isMonday) {\n $this->processReports(AutomatedReportsService::FREQUENCY_WEEKLY);\n }\n\n // Process monthly reports on the first day of the month\n if ($isFirstDayOfMonth) {\n $this->processReports(AutomatedReportsService::FREQUENCY_MONTHLY);\n }\n\n // Process quarterly reports on the first day of January, April, July, and October\n if ($isFirstDayOfMonth && $isQuarterlyMonth) {\n $this->processReports(AutomatedReportsService::FREQUENCY_QUARTERLY);\n }\n\n $this->logger->info(self::LOG_PREFIX . ' Completed');\n\n return 0;\n }\n\n /**\n * Process reports for a specific frequency.\n *\n * @param string $frequency\n *\n * @return void\n */\n private function processReports(string $frequency): void\n {\n $this->logger->info(self::LOG_PREFIX . \" Processing $frequency reports\");\n\n $reportId = $this->option('report-id');\n if ($reportId !== null) {\n $reports = $this->getReportById($reportId);\n } else {\n // Get all enabled, not deleted reports with active teams for the specified frequency\n $reports = $this->reportRepository->getActiveReportsByFrequency($frequency);\n }\n\n $this->logger->info(self::LOG_PREFIX . \" Found {$reports->count()} $frequency reports to process\");\n\n /** @var AutomatedReport $report */\n foreach ($reports as $report) {\n $this->logger->info(self::LOG_PREFIX . ' Dispatching Generate Report job for report', [\n 'reportUuid' => $report->getUuid(),\n 'teamId' => $report->getTeamId(),\n 'frequency' => $report->getFrequency(),\n 'type' => $report->getType(),\n ]);\n\n $job = $report->isAskJiminnyReport()\n ? new RequestGenerateAskJiminnyReportJob($report->getUuid())\n : new RequestGenerateReportJob($report->getUuid());\n\n $this->dispatcher->dispatch($job);\n }\n }\n\n private function getReportById(string $reportId): Collection\n {\n $report = $this->reportRepository->findByIdOrUuid($reportId);\n\n if ($report === null) {\n $this->logger->warning(self::LOG_PREFIX . ' Report not found for --report-id', ['reportId' => $reportId]);\n $this->warn(\"Report not found: {$reportId}\");\n\n return collect();\n }\n\n if (! $report->getStatus()) {\n $this->logger->warning(self::LOG_PREFIX . ' Report is inactive, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n ]);\n $this->warn('Report is inactive — processing anyway (manual override).');\n }\n\n $team = $report->getTeam();\n if ($team->getStatus() !== Team::STATUS_ACTIVE) {\n $this->logger->warning(self::LOG_PREFIX . ' Team is not active, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n 'teamId' => $report->getTeamId(),\n 'teamStatus' => $team->getStatus(),\n ]);\n $this->warn(\"Team #{$report->getTeamId()} is not active — processing anyway (manual override).\");\n }\n\n if ($report->isExpired()) {\n $this->logger->warning(self::LOG_PREFIX . ' Report is expired, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n 'expiresAt' => $report->getExpiresAt()?->toDateString(),\n ]);\n $this->warn('Report is expired (expires_at: ' . $report->getExpiresAt()?->toDateString() . ') — processing anyway (manual override).');\n }\n\n $this->info(self::LOG_PREFIX . ' Automated report found ' . $report->getCustomName());\n\n return collect([$report]);\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands\\Reports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Bus\\Dispatcher as BusDispatcher;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateReportJob;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\n\nclass AutomatedReportsCommand extends Command\n{\n /**\n * Log prefix for all log messages\n */\n private const string LOG_PREFIX = '[automated-reports]';\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected $signature = 'automated-reports \n {--report-id= : Process a specific report by ID or UUID (bypasses frequency scheduling)}';\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly). \n Use --report-id to manually trigger a specific report by ID or UUID.';\n\n\n public function __construct(\n private readonly LoggerInterface $logger,\n private readonly BusDispatcher $dispatcher,\n private readonly AutomatedReportsRepository $reportRepository\n ) {\n parent::__construct();\n }\n\n /**\n * Execute the console command.\n *\n * @return int\n */\n public function handle(): int\n {\n $this->logger->info(self::LOG_PREFIX . ' Started');\n\n $now = Carbon::now();\n $isMonday = $now->isMonday();\n $isFirstDayOfMonth = $now->day === 1;\n $currentMonth = $now->month;\n\n // Check if the current month is a quarterly month (January, April, July, October)\n $isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10], true);\n\n $this->logger->info(self::LOG_PREFIX . ' Checking conditions', [\n 'isMonday' => $isMonday,\n 'isFirstDayOfMonth' => $isFirstDayOfMonth,\n 'currentMonth' => $currentMonth,\n 'isQuarterlyMonth' => $isQuarterlyMonth,\n ]);\n\n // Process daily reports\n $this->processReports(AutomatedReportsService::FREQUENCY_DAILY);\n\n // Process weekly reports on Mondays\n if ($isMonday) {\n $this->processReports(AutomatedReportsService::FREQUENCY_WEEKLY);\n }\n\n // Process monthly reports on the first day of the month\n if ($isFirstDayOfMonth) {\n $this->processReports(AutomatedReportsService::FREQUENCY_MONTHLY);\n }\n\n // Process quarterly reports on the first day of January, April, July, and October\n if ($isFirstDayOfMonth && $isQuarterlyMonth) {\n $this->processReports(AutomatedReportsService::FREQUENCY_QUARTERLY);\n }\n\n $this->logger->info(self::LOG_PREFIX . ' Completed');\n\n return 0;\n }\n\n /**\n * Process reports for a specific frequency.\n *\n * @param string $frequency\n *\n * @return void\n */\n private function processReports(string $frequency): void\n {\n $this->logger->info(self::LOG_PREFIX . \" Processing $frequency reports\");\n\n $reportId = $this->option('report-id');\n if ($reportId !== null) {\n $reports = $this->getReportById($reportId);\n } else {\n // Get all enabled, not deleted reports with active teams for the specified frequency\n $reports = $this->reportRepository->getActiveReportsByFrequency($frequency);\n }\n\n $this->logger->info(self::LOG_PREFIX . \" Found {$reports->count()} $frequency reports to process\");\n\n /** @var AutomatedReport $report */\n foreach ($reports as $report) {\n $this->logger->info(self::LOG_PREFIX . ' Dispatching Generate Report job for report', [\n 'reportUuid' => $report->getUuid(),\n 'teamId' => $report->getTeamId(),\n 'frequency' => $report->getFrequency(),\n 'type' => $report->getType(),\n ]);\n\n $job = $report->isAskJiminnyReport()\n ? new RequestGenerateAskJiminnyReportJob($report->getUuid())\n : new RequestGenerateReportJob($report->getUuid());\n\n $this->dispatcher->dispatch($job);\n }\n }\n\n private function getReportById(string $reportId): Collection\n {\n $report = $this->reportRepository->findByIdOrUuid($reportId);\n\n if ($report === null) {\n $this->logger->warning(self::LOG_PREFIX . ' Report not found for --report-id', ['reportId' => $reportId]);\n $this->warn(\"Report not found: {$reportId}\");\n\n return collect();\n }\n\n if (! $report->getStatus()) {\n $this->logger->warning(self::LOG_PREFIX . ' Report is inactive, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n ]);\n $this->warn('Report is inactive — processing anyway (manual override).');\n }\n\n $team = $report->getTeam();\n if ($team->getStatus() !== Team::STATUS_ACTIVE) {\n $this->logger->warning(self::LOG_PREFIX . ' Team is not active, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n 'teamId' => $report->getTeamId(),\n 'teamStatus' => $team->getStatus(),\n ]);\n $this->warn(\"Team #{$report->getTeamId()} is not active — processing anyway (manual override).\");\n }\n\n if ($report->isExpired()) {\n $this->logger->warning(self::LOG_PREFIX . ' Report is expired, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n 'expiresAt' => $report->getExpiresAt()?->toDateString(),\n ]);\n $this->warn('Report is expired (expires_at: ' . $report->getExpiresAt()?->toDateString() . ') — processing anyway (manual override).');\n }\n\n $this->info(self::LOG_PREFIX . ' Automated report found ' . $report->getCustomName());\n\n return collect([$report]);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"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},"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},"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},"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},"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},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8823152026232216038
|
6686649039917036621
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AutomatedReportsCommandTest
Run 'AutomatedReportsCommandTest'
Debug 'AutomatedReportsCommandTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
17
15
13
Previous Highlighted Error
Next Highlighted Error
SELECT * FROM teams WHERE id = 1;
select * from crm_layouts where crm_configuration_id = 39;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 283;
SELECT * FROM crm_fields WHERE id = 2234;
SELECT * FROM crm_field_values WHERE crm_field_id = 2234;
select * from crm_profiles where user_id = 143;
select * from record_types where crm_configuration_id = 39; # 0121K000001MHElQAO,0121K000001MHEqQAO
select * from business_processes where crm_configuration_id = 39;
# 01941000000H669AAC, 01941000000H66JAAS
select * from record_type_field_values
where record_type_id IN (24);
select * from crm_field_values where id IN (2730);
select * from crm_configurations where id = 39;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 1
and sa.provider = 'salesforce'; #1035
select * from users where team_id = 1; # 222 group 3
SELECT * FROM activities WHERE user_id = 222 order by id desc;
select * from sidekick_settings where team_id = 1;
select * from teams where id = 1;
select * from team_features where team_id = 1;
select * from activities where crm_configuration_id = 2
and provider = 'ms-teams' and id = 608765;
SELECT * FROM activities WHERE crm_configuration_id = 2 and crm_provider_id = '59523413338';
select * from sidekick_settings where team_id = 2;
SELECT * FROM activities WHERE id = 608660;
select * from activity_summary_logs where activity_id = 608660;
select * from ai_prompts where transcription_id = 11214;
# [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('ed78a437-2804-450e-ab2f-56ab1c641346') = uuid;
# id: 608818, crm: 59628809737
SELECT * FROM activities WHERE uuid_to_bin('36b06e55-afdd-4782-8dee-c624cd0af191') = uuid;
# id: 608821, crm: 59632069252
SELECT ce.start_time, ce.end_time, a.id, a.uuid, crm_provider_id, calendar_event_id, title,
playbook_category_id, user_id, lead_id, contact_id, account_id, opportunity_id,
scheduled_start_time, scheduled_end_time, actual_start_time, actual_end_time, a.created_at
FROM activities a
join calendar_events ce on a.calendar_event_id = ce.id
WHERE a.id IN (608818, 608821);
select * from users where team_id = 1;
select * from team_settings where team_id = 1;
select * from crm_profiles where crm_configuration_id = 39 order by user_id;
select * from team_features where team_id = 1;
select * from users where team_id = 2;
SELECT * FROM activities WHERE uuid_to_bin('ec7647e9-5225-458b-b475-f31aa2769204') = uuid; # 612639
# Preslava N. Ivanova, grou id 3
SELECT * FROM opportunities WHERE uuid_to_bin('a2928fe5-aec5-46cb-85d9-7654c89e46a6') = uuid;
select * from activities where opportunity_id = 344 and actual_start_time between '2024-10-11 00:00:00' and '2024-10-12 00:00:00';
select
a.id,
a.type,
a.scheduled_start_time,
a.actual_start_time,
a.created_at,
a.opportunity_id,
a.status
FROM activities a
WHERE opportunity_id = 344
and status IN ('completed', 'received', 'delivered')
and (
(a.actual_start_time between '2024-10-11 00:00:00' and '2024-10-12 00:00:00')
OR (a.created_at between '2024-10-11 00:00:00' and '2024-10-12 00:00:00')
OR (a.scheduled_start_time between '2024-10-11 00:00:00' and '2024-10-12 00:00:00'))
;
SELECT * FROM users WHERE id = 222;
SELECT * FROM crm_profiles WHERE user_id = 222;
select * from crm_layouts where crm_configuration_id = 39;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 281;
select * from group_deal_risk_types;
select * from opportunities where team_id = 1;
SELECT * FROM opportunities WHERE id = 315;
SELECT * FROM crm_field_data WHERE object_id = 315;
select * from crm_field_data where object_id = 260;
select * from generic_ai_prompts where subject_id = 315;
select * from teams; # 36, 21, 121, [EMAIL]
SELECT * FROM social_accounts WHERE sociable_id = 121 and provider = 'bullhorn';
# [PASSWORD_DOTS]
select * from teams where id = 1;
select * from crm_configurations where id = 39;
select * from users where team_id = 1;
select u.email, cp.* from users u
join crm_profiles cp on u.id = cp.user_id
where u.team_id = 1;
# 1 - 00541000004281rAAA
# 204 - 0052g000003freeAAA
# 429 - 0052g000003qGOiAAM
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 1
and sa.provider = 'salesforce';
select * from activities where type = 'softphone'
and created_at > '2024-12-11 15:24:36' order by id desc;
select * from activity_providers where team_id = 1;
select * from activity_provider_users where activity_provider_id = 328;
select * from opportunities where crm_configuration_id = 39
AND account_id = 178 AND is_closed = false
order by created_at DESC;
select * from contacts where id = 3952;
select * from accounts where id = 178;
# [PASSWORD_DOTS]
select * from teams where id = 36;
select * from crm_configurations where id = 21;
select * from users where team_id = 36;
select u.email, cp.* from users u
join crm_profiles cp on u.id = cp.user_id
where u.team_id = 36;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 36
and sa.provider = 'bullhorn';
select * from social_accounts where id = 348;
UPDATE social_accounts SET
provider_user_token = '21442_6802599_91:41179a58-21e7-4d7c-ad58-56bb666b2f65',
provider_refresh_token = '21442_6802599_91:01c6b335-3f2a-42e4-85ff-8a08fa65fceb',
expires = 1733998131,
state = 'connected'
WHERE id = 348;
# [PASSWORD_DOTS]
select * from teams where id = 31;
select * from crm_configurations where id = 18;
select * from users where team_id = 31; # 257
select u.email, cp.* from users u
join crm_profiles cp on u.id = cp.user_id
where u.team_id = 31;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 31
and sa.provider = 'close';
select * from contacts where crm_configuration_id = 18;
# [PASSWORD_DOTS] NEPTUNE [PASSWORD_DOTS]
select * from teams;
select * from users where id IN (1030, 1035, 1052);
select * from crm_configurations;
select * from users where team_id = 65; # 257
select * from team_settings where team_id = 65; # 257
select * from invitations where team_id = 65; # 257
select * from users where email = '[EMAIL]'; # 257
select u.email, cp.* from users u
join crm_profiles cp on u.id = cp.user_id
where u.team_id = 65;
select * from crm_configurations where id = 53;
select * from accounts where crm_configuration_id = 53 order by id desc;
select * from leads where crm_configuration_id = 53 order by id desc;
select * from contacts where crm_configuration_id = 53 order by id desc;
select * from opportunities where crm_configuration_id = 53 order by id desc;
select * from crm_profiles where crm_configuration_id = 53 order by id desc;
select * from crm_fields where crm_configuration_id = 53 order by id desc;
select * from crm_field_values where crm_field_id = 3341 order by id desc;
select * from crm_layouts where crm_configuration_id = 53 order by id desc;
select * from stages where crm_configuration_id = 53 order by id desc;
select * from crm_profiles where crm_configuration_id = 13;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 65
and sa.provider = 'integration-app';
select * from contacts where crm_configuration_id = 13;
select * from social_accounts where sociable_id = 283;
SELECT * FROM opportunities WHERE crm_provider_id = '006O400000E9bzeIAB';
select * from activity_providers where team_id = 65;
SELECT * FROM activities WHERE crm_configuration_id IN (51, 52, 53);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 65
;
# [PASSWORD_DOTS] STAGING [PASSWORD_DOTS]
SELECT * FROM teams;
SELECT * FROM teams WHERE id = 88;
SELECT * FROM teams WHERE id = 89;
select * from team_settings where team_id = 89;
SELECT * FROM users WHERE team_id = 89;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 89;
select * from users;
SELECT * FROM social_accounts WHERE sociable_id = 1761;
SELECT * FROM crm_configurations WHERE id = 70;
select * from accounts where crm_configuration_id = 70 order by id desc;
select * from leads where crm_configuration_id = 70 order by id desc;
select * from contacts where crm_configuration_id = 70 order by id desc;
select * from opportunities where crm_configuration_id = 70 order by id desc;
select * from crm_profiles where crm_configuration_id = 70 order by id desc;
select * from crm_fields where crm_configuration_id = 70 order by id desc;
select * from crm_field_values where crm_field_id = 3536 order by id desc;
select * from crm_layouts where crm_configuration_id = 70 order by id desc;
select * from stages where crm_configuration_id = 70 order by id desc;
select * from business_processes where crm_configuration_id = 70 order by id desc;
select * from business_process_stages where business_process_id = 34;
select * from contacts where id = 10468;
select * from crm_layouts where crm_configuration_id = 70;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 388;
SELECT * FROM crm_fields WHERE id IN (3533,3534,3535);
select * from activities where crm_configuration_id = 70
and (account_id IS NOT NULL or lead_id IS NOT NULL or contact_id IS NOT NULL or opportunity_id IS NOT NULL) order by id desc;
SELECT * FROM activities WHERE uuid_to_bin('2e10b60f-8a61-41c5-a3d4-28835353dc65') = uuid;
SELECT * FROM activities where crm_configuration_id = 69 ;
SELECT * FROM users WHERE email LIKE '%[EMAIL]%';
SELECT * FROM activities WHERE uuid_to_bin('5a150c93-40fc-42ec-b3bd-c1d328e09f6e') = uuid;
SELECT * FROM opportunities WHERE id = 385;
select * from participants p
join activities a on p.activity_id = a.id
where a.crm_configuration_id = 70
and (p.lead_id IS NOT NULL or p.contact_id IS NOT NULL);
SELECT * FROM participants WHERE id = 1013638;
select * from teams where id = 90;
select * from users where team_id = 90;
select * from social_accounts where social_accounts.sociable_id IN (1960,1760);
SELECT * FROM crm_profiles WHERE crm_configuration_id = 71;
select * from invitations where team_id = 90;
select * from crm_configurations where id = 71;
select * from accounts where crm_configuration_id = 71 order by id desc;
select * from leads where crm_configuration_id = 71 order by id desc;
select * from contacts where crm_configuration_id = 71 order by id desc;
select * from opportunities where crm_configuration_id = 71 order by id desc;
select * from crm_profiles where crm_configuration_id = 71 order by id desc;
select * from crm_fields where crm_configuration_id = 71 order by id desc;
select * from crm_field_values where crm_field_id = 3341 order by id desc;
select * from crm_layouts where crm_configuration_id = 71 order by id desc;
select * from stages where crm_configuration_id = 71 order by id desc;
select * from users order by secondary_email desc;
select u.id, u.email, u.status, sa.id, sa.provider_user_id from social_accounts sa
join users u on sa.sociable_id = u.id
where sa.provider = 'google' and u.email LIKE 'aneliya%';
select * from failed_jobs order by id desc;
select * from users where email = '[EMAIL]' or secondary_email = '[EMAIL]';
select * from teams;
SELECT * FROM crm_profiles WHERE crm_configuration_id = 39;
SELECT * FROM crm_fields WHERE crm_configuration_id = 39 and object_type = 'task';
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 1
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('c38b3895-fd0f-4b1f-9fb2-c170dba137c6') = uuid;
SELECT * FROM crm_configurations WHERE id = 70;
select * from teams where id = 1;
select * from groups where team_id = 1;
select * from users where team_id = 1;
select o.id, o.name,o.close_date, u.id, u.name, u.group_id, r.id, r.display_name, g.name, g.scope from opportunities o
join users u on o.user_id = u.id
join groups g on u.group_id = g.id
join role_user ru on u.id = ru.user_id
join roles r on ru.role_id = r.id
where o.crm_configuration_id = 39 and close_date > '2024-01-01 00:00:00';
select * from role_user where user_id = 143;
select * from roles;
select * from role_user;
select * from groups where id = 9;
select * from scope_groups where group_id = 9;
# [PASSWORD_DOTS]
select * from teams where id = 36;
select * from crm_configurations;
SELECT * FROM social_accounts WHERE sociable_id = 121;
[URL_WITH_CREDENTIALS] string
*/
protected $signature = 'automated-reports
{--report-id= : Process a specific report by ID or UUID (bypasses frequency scheduling)}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly).
Use --report-id to manually trigger a specific report by ID or UUID.';
public function __construct(
private readonly LoggerInterface $logger,
private readonly BusDispatcher $dispatcher,
private readonly AutomatedReportsRepository $reportRepository
) {
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle(): int
{
$this->logger->info(self::LOG_PREFIX . ' Started');
$now = Carbon::now();
$isMonday = $now->isMonday();
$isFirstDayOfMonth = $now->day === 1;
$currentMonth = $now->month;
// Check if the current month is a quarterly month (January, April, July, October)
$isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10], true);
$this->logger->info(self::LOG_PREFIX . ' Checking conditions', [
'isMonday' => $isMonday,
'isFirstDayOfMonth' => $isFirstDayOfMonth,
'currentMonth' => $currentMonth,
'isQuarterlyMonth' => $isQuarterlyMonth,
]);
// Process daily reports
$this->processReports(AutomatedReportsService::FREQUENCY_DAILY);
// Process weekly reports on Mondays
if ($isMonday) {
$this->processReports(AutomatedReportsService::FREQUENCY_WEEKLY);
}
// Process monthly reports on the first day of the month
if ($isFirstDayOfMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_MONTHLY);
}
// Process quarterly reports on the first day of January, April, July, and October
if ($isFirstDayOfMonth && $isQuarterlyMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_QUARTERLY);
}
$this->logger->info(self::LOG_PREFIX . ' Completed');
return 0;
}
/**
* Process reports for a specific frequency.
*
* @param string $frequency
*
* @return void
*/
private function processReports(string $frequency): void
{
$this->logger->info(self::LOG_PREFIX . " Processing $frequency reports");
$reportId = $this->option('report-id');
if ($reportId !== null) {
$reports = $this->getReportById($reportId);
} else {
// Get all enabled, not deleted reports with active teams for the specified frequency
$reports = $this->reportRepository->getActiveReportsByFrequency($frequency);
}
$this->logger->info(self::LOG_PREFIX . " Found {$reports->count()} $frequency reports to process");
/** @var AutomatedReport $report */
foreach ($reports as $report) {
$this->logger->info(self::LOG_PREFIX . ' Dispatching Generate Report job for report', [
'reportUuid' => $report->getUuid(),
'teamId' => $report->getTeamId(),
'frequency' => $report->getFrequency(),
'type' => $report->getType(),
]);
$job = $report->isAskJiminnyReport()
? new RequestGenerateAskJiminnyReportJob($report->getUuid())
: new RequestGenerateReportJob($report->getUuid());
$this->dispatcher->dispatch($job);
}
}
private function getReportById(string $reportId): Collection
{
$report = $this->reportRepository->findByIdOrUuid($reportId);
if ($report === null) {
$this->logger->warning(self::LOG_PREFIX . ' Report not found for --report-id', ['reportId' => $reportId]);
$this->warn("Report not found: {$reportId}");
return collect();
}
if (! $report->getStatus()) {
$this->logger->warning(self::LOG_PREFIX . ' Report is inactive, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
]);
$this->warn('Report is inactive — processing anyway (manual override).');
}
$team = $report->getTeam();
if ($team->getStatus() !== Team::STATUS_ACTIVE) {
$this->logger->warning(self::LOG_PREFIX . ' Team is not active, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
'teamId' => $report->getTeamId(),
'teamStatus' => $team->getStatus(),
]);
$this->warn("Team #{$report->getTeamId()} is not active — processing anyway (manual override).");
}
if ($report->isExpired()) {
$this->logger->warning(self::LOG_PREFIX . ' Report is expired, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
'expiresAt' => $report->getExpiresAt()?->toDateString(),
]);
$this->warn('Report is expired (expires_at: ' . $report->getExpiresAt()?->toDateString() . ') — processing anyway (manual override).');
}
$this->info(self::LOG_PREFIX . ' Automated report found ' . $report->getCustomName());
return collect([$report]);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
|
62434
|
1349
|
7
|
2026-04-21T07:53:37.079682+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776758017079_m2.jpg...
|
iTerm2
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
SlackHomActivityLateMoremistoryWindowHeldResults f SlackHomActivityLateMoremistoryWindowHeldResults for: Al Re..4. Search details: Al....cive feedhackMessages= FlltersAdded by Confluence CloudScreenshot 202..Shared bv Galva Di.l$ 10$ 4• 48442Nikolay YankovFeb 9thпо пьовия таск този линиautomation shouldhappen in our new AllRevorts page- newbutton for AJGalva Dimitrovaкогато стигнеш ло товаhttps:/uminnv.atlassian.net/browse/JY-20372Y.20279 Al RonarteEmpty page design andpromoulonStatus: BacklogTvoe: StoryAssignee: Nikolay Yankov1 Prioritv: MediumAssignChange statusAl SummariseAdded bv lira GloudGalttoin inrer..at 2:10@ Search: Al Reports > Empty page design and p• plattorm-inner-teamMessagesF2 Channel OverviewRehnementsr Files1 Pinse BookmarksFriday. April 3rdvjiminny/app| Apr 1st | Added by GitHubGalya Dimitrova 12:37 PMсторита за рефаинмьнт.• https://iiminny.atlassian.net/browse/JY-20489https://iminny.aulassian.net/browse/Jy-203/z• https://iiminny.atlassian.net/browse/JY-19628•https://iminny.atlassian.net/browse/Jy-20000•https://minny.atlassian.net/browse/Jy-Z03o1JY-20489 Rework Nudges - Phase 2 - change Nudges to use the indexed at nerio...Status: BacklogA Tvne: Story.NN Assionee: Nikolav Nikolov1 Prioritv: MediumLinked docs|7 Nudge System: Implementin| Nudge Feature Performance..Sync thread** Al SummariseAddod by lira GloudY.20272 A Renorts > Fmntv nage decion andi nromotioniStatus: Backlog# Type: Story(•) Ascionep- Unassioned1 Prioritv- MediumSunc threadAdded by Jira CloudIV.10429 Cvsluation of A1 DanaramalStatus: BacklogType: Technical Stor1 Drioritv- ModiumSune throad*Al SummariceIv.20040 A1 Panorama for Call Scoring in 71W Type: Stor8) Assienee: Unassigned1 Priority: Medium* Al GummoricoJY-20361 AJ Panorama for Call Scoring in • D)… Tvpe: StonAssienee: Unassigned1 Prioritv: MediumSync thread+Al Summarise• Retro Action Items8 10Deleted fileFavourites@ jiminny(®) AirDrop• Recents* Applications|9 Documents• Downloads1i lukasiCloud• iCloud Drive999 Svnc toldeLocations0J DXP4800PLUS-B5F A49 Network• CRM• Orange• Red• Yellow• Greer• Purple|• All Tags..v Latest messagesMessage @nlattform-inner-teamAalSupport Daily - in 4h 7 mwork- Refinement 2026-03-30.mp4* Dally 2026-03-30.mp4- Daily 2026-03-27.mp4Dally 2026-03-24.mp4_ Refinement 2026-03-23.mp4= Daily 2026-03-23.mp4** BE chapter 2026-03-20.mp4• Dallv 2026-03-20,m04am Planing 2026-03-18-converted.mp4Refinement 2026-02-09-converted.mp4KA Dally 2026-03-19.mp4• Review 2026-03-18.mn4am Planing 2026-03-18.mp4Ketro 2020-03-1/.mp4• Dailv 2026-03-17 mo4•: Refinement 2026-03-16.mp4• Daily 2026-03-16.mp4иA Dallv 2026-03-13.mp4r 1-1 2026-03-12 mn4F Dailv 2026-03-12.mp4an. Daily 2026-03-11.mp4• Dailv 2026-03-10.mo4xe: Refinement 2026-03-09.mp4Daily 2026-03-09.mp4ru Dailv 2026-03-06.mp4a Planning 2026-03-04.mp4** Dally 2020-02-2/.m04Dailv 2026-02-26.movDaily 2026-02-25.movin Opportunity-Contacts 2026-02-24.mp4me Dailv 2026-02-24.mo4P Dofinamant 2026.02.22 mлlв Daily 2026-02-20 8 Ani.mo4_ Daily 2026-02-19.mp4ka Review 2026-02-18.mo4es Plannina 2026-02-18 mp4• Retro 2026-02-17.mp4= Refinement & P1 debuagina 2026-02-16.mp4•* SyncObjects3 2026-02-16.mp4• SyncObiects1 2026-02-16.mp4= Daily 2026-02-16 mn/Daily 2026-02-13.mр4Al chapter 2026-02-11.mp4…* Allhands 2026-02-11.mo4el CaeeA.11 mл/• Refineent 2026-02-09.mp4naily 2026.02.00 mm/* Daily 2026-02-05.mp41a Review 2026-02-04 mn/lE Plannina 2026-02-04.mp4Date Modified30 Mar 2026 at 17:1230 Mar 2026 at 10:0527 Mar 2026 at 10:0924 Mar 2026 at 10:0023 Mar 2026 at 17:0323 Mar 2026 at 10:0020 Mar 2026 at 11:4620 Mar 2026 at 10:0610 Mar 2026 at 12:0119 Mar 2026 at g:o/18 Mar 2026 at 16:2018 Mar 2026 at 11:1417 Mar 2026 at 17:4017 Mar 2026 at 10:1816 Mar 2026 at 16:551s Mar 2026 at 10.1212 Mar 2026 at 18:2512 Mar 2026 at 10:1011 Mar 2026 at 10:0610 Mar 2026 at 9:579 Mar 2026 at 17:046 Mar 2026 at 9:57A Mar 2026 at 11:092 Mar 2026 at 10:0727 Feb 2026 at 10:0226 Feb 2026 at 9:5325 Feb 2026 at 9:5924 Feb 2026 at 12:0324 Feb 2026 at 10:02h2 Coh 2006 at 16:2120 Feb 2026 at 10:5319 Feb 2026 at 9:5418 Feb 2026 at 16:2518 Feb 2026 at 10:5717 Feb 2026 at 17:3816 Feb 2026 at 17:36MG CAH 2006 A+ 15:1016 Feb 2026 at 11:2916 Coh 2026 at 10:11113 Feb 2026 at 10:1111 Feb 2026 at 17:3411 Feb 2026 at 11:464 Goh 2anG dt 40.029 Feb 2026 at 17:05Boh 2006 at 10:026 Feb 2026 at 9:595 Feb 2026 at 9:57A Feh 2026 at 16:20.ah 4.92 Eah 202A at 17:50100% S2Tue 21 Apr 10:53:362,77 GB641,8 MB88A2MR476,6 MB000,8 Mb3.44 GBMPEG-4 movieMDEG-A movieMPEG-4 movieMPEG-4 movieMPEG-4 movie438,9 MB MPEG-4 movie1,68 GBMPEG-4 movie430,4 M:MPEG-4 movie2,38 GBMDSG-A movie2,26 GB386,3 MBMPEG-4 movie705.8 MEMPEG.A movid2,78 GBMPEG-4 movie1,53 GBMPEG-4 movie1.2 GEMPEG-4 movie4,19 GB592,2 MB1.02 G.MDEG.A movidMP-G-4 movie637 6 MP978,7 MB798,7 MB404.6 MEMPEG-A movieMPEG-4 movieMPEG-4 movieMPEG-4 movie4,16 GB319,7 MB291.7 MBMDEeA movitMPEG-4 movie2 62 GPMDEG-A movie768,5 MBMPEG-4 movie040,0 MbMPEG-4 movie96.6 MB QT movie503,5 MB QT movie791,7 MB520,7 MBMPEG-4 movienepAT movio2,52 GB234,2 MBMPEG-4 movie925.1 MBMPEG-4 movie2.04 GB MPEG-4 movie1,31 GB4.53 G:MPEG-4 movie140Cp1,04 GB548.1 MEMDECA mAvidMPEG-4 movieMPEG-4 movie7217 MPMDEG-A movid796.1 MB MPEG-4 movie1,21 GBMPEG-4 movie1.71 GEMPEG-4 movieG02 MP MDCCA movid3.44 G:MPEG-4 movie276 9 MRMDEG.A movio459.3 MB MPEG-4 movie325,1 MB653 0 MRMDEG-A movidAEGEP MDEC A movid1 ARAR MDEC_A mAvio...
|
NULL
|
8823106232344561702
|
NULL
|
visual_change
|
ocr
|
NULL
|
SlackHomActivityLateMoremistoryWindowHeldResults f SlackHomActivityLateMoremistoryWindowHeldResults for: Al Re..4. Search details: Al....cive feedhackMessages= FlltersAdded by Confluence CloudScreenshot 202..Shared bv Galva Di.l$ 10$ 4• 48442Nikolay YankovFeb 9thпо пьовия таск този линиautomation shouldhappen in our new AllRevorts page- newbutton for AJGalva Dimitrovaкогато стигнеш ло товаhttps:/uminnv.atlassian.net/browse/JY-20372Y.20279 Al RonarteEmpty page design andpromoulonStatus: BacklogTvoe: StoryAssignee: Nikolay Yankov1 Prioritv: MediumAssignChange statusAl SummariseAdded bv lira GloudGalttoin inrer..at 2:10@ Search: Al Reports > Empty page design and p• plattorm-inner-teamMessagesF2 Channel OverviewRehnementsr Files1 Pinse BookmarksFriday. April 3rdvjiminny/app| Apr 1st | Added by GitHubGalya Dimitrova 12:37 PMсторита за рефаинмьнт.• https://iiminny.atlassian.net/browse/JY-20489https://iminny.aulassian.net/browse/Jy-203/z• https://iiminny.atlassian.net/browse/JY-19628•https://iminny.atlassian.net/browse/Jy-20000•https://minny.atlassian.net/browse/Jy-Z03o1JY-20489 Rework Nudges - Phase 2 - change Nudges to use the indexed at nerio...Status: BacklogA Tvne: Story.NN Assionee: Nikolav Nikolov1 Prioritv: MediumLinked docs|7 Nudge System: Implementin| Nudge Feature Performance..Sync thread** Al SummariseAddod by lira GloudY.20272 A Renorts > Fmntv nage decion andi nromotioniStatus: Backlog# Type: Story(•) Ascionep- Unassioned1 Prioritv- MediumSunc threadAdded by Jira CloudIV.10429 Cvsluation of A1 DanaramalStatus: BacklogType: Technical Stor1 Drioritv- ModiumSune throad*Al SummariceIv.20040 A1 Panorama for Call Scoring in 71W Type: Stor8) Assienee: Unassigned1 Priority: Medium* Al GummoricoJY-20361 AJ Panorama for Call Scoring in • D)… Tvpe: StonAssienee: Unassigned1 Prioritv: MediumSync thread+Al Summarise• Retro Action Items8 10Deleted fileFavourites@ jiminny(®) AirDrop• Recents* Applications|9 Documents• Downloads1i lukasiCloud• iCloud Drive999 Svnc toldeLocations0J DXP4800PLUS-B5F A49 Network• CRM• Orange• Red• Yellow• Greer• Purple|• All Tags..v Latest messagesMessage @nlattform-inner-teamAalSupport Daily - in 4h 7 mwork- Refinement 2026-03-30.mp4* Dally 2026-03-30.mp4- Daily 2026-03-27.mp4Dally 2026-03-24.mp4_ Refinement 2026-03-23.mp4= Daily 2026-03-23.mp4** BE chapter 2026-03-20.mp4• Dallv 2026-03-20,m04am Planing 2026-03-18-converted.mp4Refinement 2026-02-09-converted.mp4KA Dally 2026-03-19.mp4• Review 2026-03-18.mn4am Planing 2026-03-18.mp4Ketro 2020-03-1/.mp4• Dailv 2026-03-17 mo4•: Refinement 2026-03-16.mp4• Daily 2026-03-16.mp4иA Dallv 2026-03-13.mp4r 1-1 2026-03-12 mn4F Dailv 2026-03-12.mp4an. Daily 2026-03-11.mp4• Dailv 2026-03-10.mo4xe: Refinement 2026-03-09.mp4Daily 2026-03-09.mp4ru Dailv 2026-03-06.mp4a Planning 2026-03-04.mp4** Dally 2020-02-2/.m04Dailv 2026-02-26.movDaily 2026-02-25.movin Opportunity-Contacts 2026-02-24.mp4me Dailv 2026-02-24.mo4P Dofinamant 2026.02.22 mлlв Daily 2026-02-20 8 Ani.mo4_ Daily 2026-02-19.mp4ka Review 2026-02-18.mo4es Plannina 2026-02-18 mp4• Retro 2026-02-17.mp4= Refinement & P1 debuagina 2026-02-16.mp4•* SyncObjects3 2026-02-16.mp4• SyncObiects1 2026-02-16.mp4= Daily 2026-02-16 mn/Daily 2026-02-13.mр4Al chapter 2026-02-11.mp4…* Allhands 2026-02-11.mo4el CaeeA.11 mл/• Refineent 2026-02-09.mp4naily 2026.02.00 mm/* Daily 2026-02-05.mp41a Review 2026-02-04 mn/lE Plannina 2026-02-04.mp4Date Modified30 Mar 2026 at 17:1230 Mar 2026 at 10:0527 Mar 2026 at 10:0924 Mar 2026 at 10:0023 Mar 2026 at 17:0323 Mar 2026 at 10:0020 Mar 2026 at 11:4620 Mar 2026 at 10:0610 Mar 2026 at 12:0119 Mar 2026 at g:o/18 Mar 2026 at 16:2018 Mar 2026 at 11:1417 Mar 2026 at 17:4017 Mar 2026 at 10:1816 Mar 2026 at 16:551s Mar 2026 at 10.1212 Mar 2026 at 18:2512 Mar 2026 at 10:1011 Mar 2026 at 10:0610 Mar 2026 at 9:579 Mar 2026 at 17:046 Mar 2026 at 9:57A Mar 2026 at 11:092 Mar 2026 at 10:0727 Feb 2026 at 10:0226 Feb 2026 at 9:5325 Feb 2026 at 9:5924 Feb 2026 at 12:0324 Feb 2026 at 10:02h2 Coh 2006 at 16:2120 Feb 2026 at 10:5319 Feb 2026 at 9:5418 Feb 2026 at 16:2518 Feb 2026 at 10:5717 Feb 2026 at 17:3816 Feb 2026 at 17:36MG CAH 2006 A+ 15:1016 Feb 2026 at 11:2916 Coh 2026 at 10:11113 Feb 2026 at 10:1111 Feb 2026 at 17:3411 Feb 2026 at 11:464 Goh 2anG dt 40.029 Feb 2026 at 17:05Boh 2006 at 10:026 Feb 2026 at 9:595 Feb 2026 at 9:57A Feh 2026 at 16:20.ah 4.92 Eah 202A at 17:50100% S2Tue 21 Apr 10:53:362,77 GB641,8 MB88A2MR476,6 MB000,8 Mb3.44 GBMPEG-4 movieMDEG-A movieMPEG-4 movieMPEG-4 movieMPEG-4 movie438,9 MB MPEG-4 movie1,68 GBMPEG-4 movie430,4 M:MPEG-4 movie2,38 GBMDSG-A movie2,26 GB386,3 MBMPEG-4 movie705.8 MEMPEG.A movid2,78 GBMPEG-4 movie1,53 GBMPEG-4 movie1.2 GEMPEG-4 movie4,19 GB592,2 MB1.02 G.MDEG.A movidMP-G-4 movie637 6 MP978,7 MB798,7 MB404.6 MEMPEG-A movieMPEG-4 movieMPEG-4 movieMPEG-4 movie4,16 GB319,7 MB291.7 MBMDEeA movitMPEG-4 movie2 62 GPMDEG-A movie768,5 MBMPEG-4 movie040,0 MbMPEG-4 movie96.6 MB QT movie503,5 MB QT movie791,7 MB520,7 MBMPEG-4 movienepAT movio2,52 GB234,2 MBMPEG-4 movie925.1 MBMPEG-4 movie2.04 GB MPEG-4 movie1,31 GB4.53 G:MPEG-4 movie140Cp1,04 GB548.1 MEMDECA mAvidMPEG-4 movieMPEG-4 movie7217 MPMDEG-A movid796.1 MB MPEG-4 movie1,21 GBMPEG-4 movie1.71 GEMPEG-4 movieG02 MP MDCCA movid3.44 G:MPEG-4 movie276 9 MRMDEG.A movio459.3 MB MPEG-4 movie325,1 MB653 0 MRMDEG-A movidAEGEP MDEC A movid1 ARAR MDEC_A mAvio...
|
NULL
|
|
41215
|
876
|
56
|
2026-04-17T06:06:08.709016+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776405968709_m2.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpjiminny.sentry.io/organizations/jiminny/issues/6873095751/?environment=production&environment=production-eu&project=82419- Platform Sprint 2 Q2 - Platform TeccllAcID: 26d2294b[SRD-6793] Les Mills activity type:FeedNew TabssuesErrors & Outagesa) Symfony|Component|DebuglE› xBreached Metrics+ New Tabexplorewalmaines08DashboardsUser FeedbackAll ViewsmisrgtitConfigureAicilsSettings13 hours ago | JSONSs3Path = SautomatedReportsService->getMediaPath(Sreport):vertt the tlle exists in ssif (! Storage::disk('client-data-cloud')->exists(Ss3Path)) ‹Slogger-›error (self: :LOG_PREFIXReport file not found in S3', ['uuid' => Sthis->reportUuid,'s3Path' => $s3Path,1):automatedReportsServceObject Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsServicejobDispatcherObject Jiminny\Jobs\JobDispatcherloggerObject Illuminate\Log\LogManager/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php in Illuminate\Container\BoundMethod:Illuminate\Container\(closure)if (static::isCallableWithAtSign(Scallback) || SdefaultMethod) {return static::callclass(Scontalner, scallback, sparameters, SdetaultMethod) ;35return static: :callBoundMethod(Scontainer, Scallback, function () use (Scontainer, Scallback, Sparameters) {return Scallback(..array_values(static: :getMethodDependencies(Scontainer, Scallback, Sparameters))):37)):/*** Call a string reference to a class using Classêmethod syntax.yaep/ queuer worker worker.ono. zn diminnysqueue worker worker..orocessSstartTime = (int) round(microtime(true) * 1000):nere we wisl lire orl une od and lel 1l process. ve wiet cauch any exceplions so// they can be reported to the developers logs, etc. Once the iob is finished theI/ proper events will be fired to let any listeners know this job has finished.Sjob->fire():Sthis->raiseAfterJobEvent(SconnectionName, Sjob) :caueh cxception seSisException = true;Sthis->handleJobException(SconnectionName, Sjob, Soptions, Se);connectlonnanevb ecl Leruninale vueue Jobs oesJoboptIonsObject Iiluminate\Queue \WorkerOptionsCalled from: /vendor/laravel/framework/src/Illuminate/Queue/Worker.php in Illuminate\Queue\Worker.runJobv Trace Preview10.00ms33.55minmecen soan. 1½ nocenissuesQe Error - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (']C Error - SQLSTATE(23000): Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (jQe Error - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (']C Error - League\Flysystem\Filesystem:has0: Argument #1 (Slocation) must be of type string, null ülven, called in /home/jiminn]Ge Error - SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '749-003SZ00000kiWwBYAU' for key 'contacts_/C Error - [MatchActivitiesToNewOpportunity] Cannot find opportunity with ID: 20530935 Jiminny\Exceptions\InvalidArgumentE)3700008e/?environment=production&environment=production-eu&eventid=26d2294b8bf2410bb5da08e0fd82cdef&groupld=6873095751&node=error-26d2294b8bf2410bb5, 0halA100% CS•Fri 17 Apr 9:06:08Jump to: HighlightsStack TraceTraceCantoytlaesShow 14 more framesIn App1.6/hrShow 17 more framesView Full TraceJлAho5.00hr2.22hr2.78hrGGG04-17T05:00:17.330&pageStart=2026-04-16T05:00:17.330&proiect=82419&source=issue_details×tamp=1776358817.178...
|
NULL
|
8823088564322578540
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpjiminny.sentry.io/organizations/jiminny/issues/6873095751/?environment=production&environment=production-eu&project=82419- Platform Sprint 2 Q2 - Platform TeccllAcID: 26d2294b[SRD-6793] Les Mills activity type:FeedNew TabssuesErrors & Outagesa) Symfony|Component|DebuglE› xBreached Metrics+ New Tabexplorewalmaines08DashboardsUser FeedbackAll ViewsmisrgtitConfigureAicilsSettings13 hours ago | JSONSs3Path = SautomatedReportsService->getMediaPath(Sreport):vertt the tlle exists in ssif (! Storage::disk('client-data-cloud')->exists(Ss3Path)) ‹Slogger-›error (self: :LOG_PREFIXReport file not found in S3', ['uuid' => Sthis->reportUuid,'s3Path' => $s3Path,1):automatedReportsServceObject Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsServicejobDispatcherObject Jiminny\Jobs\JobDispatcherloggerObject Illuminate\Log\LogManager/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php in Illuminate\Container\BoundMethod:Illuminate\Container\(closure)if (static::isCallableWithAtSign(Scallback) || SdefaultMethod) {return static::callclass(Scontalner, scallback, sparameters, SdetaultMethod) ;35return static: :callBoundMethod(Scontainer, Scallback, function () use (Scontainer, Scallback, Sparameters) {return Scallback(..array_values(static: :getMethodDependencies(Scontainer, Scallback, Sparameters))):37)):/*** Call a string reference to a class using Classêmethod syntax.yaep/ queuer worker worker.ono. zn diminnysqueue worker worker..orocessSstartTime = (int) round(microtime(true) * 1000):nere we wisl lire orl une od and lel 1l process. ve wiet cauch any exceplions so// they can be reported to the developers logs, etc. Once the iob is finished theI/ proper events will be fired to let any listeners know this job has finished.Sjob->fire():Sthis->raiseAfterJobEvent(SconnectionName, Sjob) :caueh cxception seSisException = true;Sthis->handleJobException(SconnectionName, Sjob, Soptions, Se);connectlonnanevb ecl Leruninale vueue Jobs oesJoboptIonsObject Iiluminate\Queue \WorkerOptionsCalled from: /vendor/laravel/framework/src/Illuminate/Queue/Worker.php in Illuminate\Queue\Worker.runJobv Trace Preview10.00ms33.55minmecen soan. 1½ nocenissuesQe Error - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (']C Error - SQLSTATE(23000): Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (jQe Error - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (']C Error - League\Flysystem\Filesystem:has0: Argument #1 (Slocation) must be of type string, null ülven, called in /home/jiminn]Ge Error - SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '749-003SZ00000kiWwBYAU' for key 'contacts_/C Error - [MatchActivitiesToNewOpportunity] Cannot find opportunity with ID: 20530935 Jiminny\Exceptions\InvalidArgumentE)3700008e/?environment=production&environment=production-eu&eventid=26d2294b8bf2410bb5da08e0fd82cdef&groupld=6873095751&node=error-26d2294b8bf2410bb5, 0halA100% CS•Fri 17 Apr 9:06:08Jump to: HighlightsStack TraceTraceCantoytlaesShow 14 more framesIn App1.6/hrShow 17 more framesView Full TraceJлAho5.00hr2.22hr2.78hrGGG04-17T05:00:17.330&pageStart=2026-04-16T05:00:17.330&proiect=82419&source=issue_details×tamp=1776358817.178...
|
41214
|
|
52100
|
1126
|
20
|
2026-04-20T06:39:29.292881+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776667169292_m1.jpg...
|
Slack
|
Stoyan Tomov (DM) - Jiminny Inc - 1 new item - Sla Stoyan Tomov (DM) - Jiminny Inc - 1 new item - Slack...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
confusion-clinic
curiosity_lab
engineering
frontend
general
infra-changes
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Nikolay Nikolov
Galya Dimitrova
Stoyan Tanev
Vasil Vasilev
Nikolay Ivanov
Aneliya Angelova
Ves
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
Pins
Pins
Add and Edit Channel Tabs
Canvas
List
Folder
Apr 1st at 4:32:05 PM
4:32
на пръв поглед това изглежда ли ти като някакъв проблем при нас?
image.png
Toggle file
image.png
Apr 1st at 4:32:44 PM
4:32
един юзър който обикновено живее в Англия, в момента е в Зимбабве и не може да набира хора през сайдкика
Apr 1st at 4:33:37 PM
4:33
пипнах гео пермисиите в twilio да позволява разговори към Зимбабве, в базата във voice_access също сложих всичко за Зимбабве на allow = 1, но юзъра продължава да не може да звъни
Apr 1st at 4:34:31 PM
4:34
не съм сигурен че тези гео пермисии ще помогнат за този случай, обикновено ги правим за да може юзърите да звънят на такива номера, а не че те физически се намират в тази държава и не могат да правят outbound разговори
Lukas Kovalik
Apr 1st at 4:34:57 PM
4:34 PM
здрасти
Apr 1st at 4:36:30 PM
4:36
това изглежда като проблем със самата авторизация
Apr 1st at 4:36:45 PM
4:36
има ли всичко на ред при нас в база
Stoyan Tomov
Apr 1st at 4:37:51 PM
4:37 PM
не знам кое точно визираш, но всичко изглежда наред
Apr 1st at 4:38:08 PM
4:38
иначе това е конкретната лог рокет сесия на юзъра
Apr 1st at 4:38:08 PM
4:38
https://app.logrocket.com/ponxaf/softphone-shceh/s/6-019d48fd-7dae-73b8-bd0e-f3c7ddf4[…]-48c3-acea-5a935e9821c0&persistForm=true&t=1775046101989.111
https://app.logrocket.com/ponxaf/softphone-shceh/s/6-019d48fd-7dae-73b8-bd0e-f3c7ddf4[…]-48c3-acea-5a935e9821c0&persistForm=true&t=1775046101989.111
Apr 1st at 4:38:11 PM
4:38
когато рейзна проблема
Apr 1st at 4:38:33 PM
4:38
не можах да намеря някаква грешка в сентри
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Apr 1st at 4:39:21 PM
4:39 PM
не знам да ти кажа, трябва да се рови, предполагам че това което каза за сманя на локация
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Apr 1st at 4:39:31 PM
4:39
човека има ли VPN
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Stoyan Tomov
Apr 1st at 4:39:39 PM
4:39 PM
не знам
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Apr 1st at 4:39:39 PM
4:39 PM
да пробва
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Apr 1st at 4:39:42 PM
4:39
да
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Apr 1st at 4:41:23 PM
4:41
иначе това за country code restriction знам само за outbound ако клиент иска да набера някой със такъв номер
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Jiminny Inc","depth":12,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Jiminny (Staging)","depth":12,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Add workspaces","depth":12,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"infra-changes","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tomov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Ves","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":21,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":17,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":19,"role_description":"text"},{"role":"AXRadioButton","text":"Add canvas","depth":18,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add canvas","depth":20,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":17,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":19,"role_description":"text"},{"role":"AXRadioButton","text":"Pins","depth":17,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Pins","depth":19,"role_description":"text"},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":17,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":17,"role_description":"text"},{"role":"AXLink","text":"Apr 1st at 4:32:05 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:32","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"на пръв поглед това изглежда ли ти като някакъв проблем при нас?","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"image.png","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Toggle file","depth":24,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXLink","text":"image.png","depth":26,"role_description":"Unlabelled image","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Apr 1st at 4:32:44 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:32","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"един юзър който обикновено живее в Англия, в момента е в Зимбабве и не може да набира хора през сайдкика","depth":24,"role_description":"text"},{"role":"AXLink","text":"Apr 1st at 4:33:37 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:33","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"пипнах гео пермисиите в twilio да позволява разговори към Зимбабве, в базата във voice_access също сложих всичко за Зимбабве на allow = 1, но юзъра продължава да не може да звъни","depth":24,"role_description":"text"},{"role":"AXLink","text":"Apr 1st at 4:34:31 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:34","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"не съм сигурен че тези гео пермисии ще помогнат за този случай, обикновено ги правим за да може юзърите да звънят на такива номера, а не че те физически се намират в тази държава и не могат да правят outbound разговори","depth":24,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"Apr 1st at 4:34:57 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:34 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"здрасти","depth":24,"role_description":"text"},{"role":"AXLink","text":"Apr 1st at 4:36:30 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:36","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"това изглежда като проблем със самата авторизация","depth":24,"role_description":"text"},{"role":"AXLink","text":"Apr 1st at 4:36:45 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:36","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"има ли всичко на ред при нас в база","depth":24,"role_description":"text"},{"role":"AXButton","text":"Stoyan Tomov","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"Apr 1st at 4:37:51 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:37 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"не знам кое точно визираш, но всичко изглежда наред","depth":24,"role_description":"text"},{"role":"AXLink","text":"Apr 1st at 4:38:08 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:38","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"иначе това е конкретната лог рокет сесия на юзъра","depth":24,"role_description":"text"},{"role":"AXLink","text":"Apr 1st at 4:38:08 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:38","depth":25,"role_description":"text"},{"role":"AXLink","text":"https://app.logrocket.com/ponxaf/softphone-shceh/s/6-019d48fd-7dae-73b8-bd0e-f3c7ddf4[…]-48c3-acea-5a935e9821c0&persistForm=true&t=1775046101989.111","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"https://app.logrocket.com/ponxaf/softphone-shceh/s/6-019d48fd-7dae-73b8-bd0e-f3c7ddf4[…]-48c3-acea-5a935e9821c0&persistForm=true&t=1775046101989.111","depth":25,"role_description":"text"},{"role":"AXLink","text":"Apr 1st at 4:38:11 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:38","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"когато рейзна проблема","depth":24,"role_description":"text"},{"role":"AXLink","text":"Apr 1st at 4:38:33 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:38","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"не можах да намеря някаква грешка в сентри","depth":24,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"Apr 1st at 4:39:21 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:39 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"не знам да ти кажа, трябва да се рови, предполагам че това което каза за сманя на локация","depth":24,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Apr 1st at 4:39:31 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:39","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"човека има ли VPN","depth":24,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Stoyan Tomov","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"Apr 1st at 4:39:39 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:39 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"не знам","depth":24,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"Apr 1st at 4:39:39 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:39 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"да пробва","depth":24,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Apr 1st at 4:39:42 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:39","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"да","depth":24,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Apr 1st at 4:41:23 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:41","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"иначе това за country code restriction знам само за outbound ако клиент иска да набера някой със такъв номер","depth":24,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8822461712210919587
|
-2293574698872453001
|
visual_change
|
hybrid
|
NULL
|
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
confusion-clinic
curiosity_lab
engineering
frontend
general
infra-changes
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Nikolay Nikolov
Galya Dimitrova
Stoyan Tanev
Vasil Vasilev
Nikolay Ivanov
Aneliya Angelova
Ves
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
Pins
Pins
Add and Edit Channel Tabs
Canvas
List
Folder
Apr 1st at 4:32:05 PM
4:32
на пръв поглед това изглежда ли ти като някакъв проблем при нас?
image.png
Toggle file
image.png
Apr 1st at 4:32:44 PM
4:32
един юзър който обикновено живее в Англия, в момента е в Зимбабве и не може да набира хора през сайдкика
Apr 1st at 4:33:37 PM
4:33
пипнах гео пермисиите в twilio да позволява разговори към Зимбабве, в базата във voice_access също сложих всичко за Зимбабве на allow = 1, но юзъра продължава да не може да звъни
Apr 1st at 4:34:31 PM
4:34
не съм сигурен че тези гео пермисии ще помогнат за този случай, обикновено ги правим за да може юзърите да звънят на такива номера, а не че те физически се намират в тази държава и не могат да правят outbound разговори
Lukas Kovalik
Apr 1st at 4:34:57 PM
4:34 PM
здрасти
Apr 1st at 4:36:30 PM
4:36
това изглежда като проблем със самата авторизация
Apr 1st at 4:36:45 PM
4:36
има ли всичко на ред при нас в база
Stoyan Tomov
Apr 1st at 4:37:51 PM
4:37 PM
не знам кое точно визираш, но всичко изглежда наред
Apr 1st at 4:38:08 PM
4:38
иначе това е конкретната лог рокет сесия на юзъра
Apr 1st at 4:38:08 PM
4:38
https://app.logrocket.com/ponxaf/softphone-shceh/s/6-019d48fd-7dae-73b8-bd0e-f3c7ddf4[…]-48c3-acea-5a935e9821c0&persistForm=true&t=1775046101989.111
https://app.logrocket.com/ponxaf/softphone-shceh/s/6-019d48fd-7dae-73b8-bd0e-f3c7ddf4[…]-48c3-acea-5a935e9821c0&persistForm=true&t=1775046101989.111
Apr 1st at 4:38:11 PM
4:38
когато рейзна проблема
Apr 1st at 4:38:33 PM
4:38
не можах да намеря някаква грешка в сентри
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Apr 1st at 4:39:21 PM
4:39 PM
не знам да ти кажа, трябва да се рови, предполагам че това което каза за сманя на локация
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Apr 1st at 4:39:31 PM
4:39
човека има ли VPN
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Stoyan Tomov
Apr 1st at 4:39:39 PM
4:39 PM
не знам
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Apr 1st at 4:39:39 PM
4:39 PM
да пробва
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Apr 1st at 4:39:42 PM
4:39
да
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Apr 1st at 4:41:23 PM
4:41
иначе това за country code restriction знам само за outbound ако клиент иска да набера някой със такъв номер
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
iTerm2ShellEditViewSessionScriptsProfilesWindowHelpDaily - Platform - in 6 m100% C8Mon 20 Apr 9:39:29DOCKER (docker-compose)181DOCKER₴81DEV (-zsh)₴2APP (-zsh)883-zsh|T1DOCKER (docker-compose)WARN[0000] /Users/lukas/jiminny/infrastructure/dev/docker/docker-compose.yml: the attribis obsolete,it will be ignored, please remove it to avoid[+] Running 2/2• Container redisRunning• Container docker_lamp_1RunningDOCKE0.0s0.05Attaching to blackfire-1, datadog-1, jiminny_ext-1,rch, kibana,ngrok, redisire-1, datadog-1, jiminny-ext-2, mariado-2, docker-Lomp._I, elasticseadocker_lamp_1docker_lamp_1Illuminate\Database\QueryExceptiondocker_lamp_1docker_lamp_1SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo for marior service not known (Connection: mysal,Host: mariadb, Port: 3306, Database: jiminny,exists (select 1 from information_schema.tables where table_schema = schema() and table_name = 'migrations' and table_type in ('BASE TABLE', 'SYSTEMVERSIONED')) asdocker_lamp_1docker_lamp_1at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838docker_lamp_1834|SexceptionType = Sthis->isUniqueConstraintError($edocker_lamp_1docker_lamp_1docker_lamp_1docker.lamp_1dockerlamp_docker_lamp_aocker._Lamp_docker.Lamp_1835836837+ 838839840841842? UniqueConstraintViolationException::class: QueryException::class;throw new SexceptionType(Sthis->getNameWithReadWriteType),squery,Sthis->prepareBindings($bindings),Se,docker_lamp_1docker_lamp_1+42 vendor framesdocker__lamp_1docker_lamp_1artisan: 13docker_lamp-Illuminate\Foundation\Application: :handleCommand(Object(Symfony\Component\Console\Input\ArgvInput))docker_lamp_12026-04-20 06:38:50+00:00 [Note][Entrypoint]: Entrypoint script for MariaDB Server 1:11.4.5+maria~ubu24041 [2026-04-20T06:38:51Z] ERROR: The server ID parameteris not set. Pleas'blackfire-agent -register'configureblackfire-1usage blackfire-agent [options]blackfire-1--collector="[URL_WITH_CREDENTIALS] client_loop: send disconnect: Broken pipeukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ |EU (-zsh)Run 'do-release-upgrade' to upgrade to it.*** System restart required ***Last login: Thu Apr 16 06:55:03 2026 from 212.39.71.189lukas@jiminny-eu-bastion:~$ client_loop: send disconnect: Broken pipeKovaliks-MacBook-Pro-Jiminny ~ $ I|T4STAGE (-zsh)Last login: Thu Apr 16 15:43:43 on consolePoetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~$XIT5QA (-zsh)Last login: Thu Apr 16 15:43:43 on consolePoetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentsFE (-zsh)Last login: Thu Apr 16 15:48:07 on ttys004PROD®STAGEPoetry could not find a pyproject.toml file in /Users/lukas or its parentsFRONTENDPoetry could not find a pyproject.toml file in /Users/lukas or its parentsLukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ l17 EXT (-zsh)Poetry could not find a pyproject.toml file in /Users/lukas or its parentsEXTENSIONPoetry could not find a pyproject.toml file in /Users/lukas or its parentsukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ l...
|
52099
|
|
23460
|
504
|
80
|
2026-04-15T11:23:38.619171+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776252218619_m1.jpg...
|
Boosteroid
|
Boosteroid
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackFileEditViewGoEDHomeDMsActivityFilesLater..• +SlackFileEditViewGoEDHomeDMsActivityFilesLater..•More+HistoryWindowHelp→Search Jiminny IncJiminny ...sos+# general# infra-changes# jiminny-bg# platform-tickets# product _launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...Direct messagesStoyan TanevVesGalya DimitrovaAneliya Angelova, ...Vasil Vasilev XSteliyan GeorgievAdelina Petrova, Ili...P. Adelina PetrovaD. Nikolay Nikolov2 Galya Dimitrova, Ni...#: AppsJira CloudToast# releases8 22+Messages@ FilesBookmarksCircleClv 2 new messagesDeploymentsuccessrui:Project: appWhen:04/15/202609:51:25Tag:View JobGitHub APP 1:53 PM2 new commits pushed tomaster by des-d0344ab16 - JY-20151: Enhance waveformdisplay with talk-to-listen ratio and stylingadjustments3c043232 - Merge pull request #11967from jiminny/JY-20151-add-talk-to-listen-to-the-waveform( jiminny/app Added by GitHubCircleCl APP 2:18 PMDeployment Successful!Project: appWhen:04/15/202611:18:51Tag:View JobMessage #releasesAaNewSupport Daily - in 37 mRActivity MonitorAll ProcessesProcess NameBoosteroidWindowServerFirefoxCP Isolated Web ContentFirefoxFirefoxFirefoxCP Isolated Web ContentCursorUlViewService (Not Responding)VTDecoderXPCServiceFirefox GPU HelperFirefox GPU HelperFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentSlack Helper (Renderer)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentNotion Calendar Helper (Renderer)FirefoxCP Isolated Web ContentclaudeNotion Helper (Renderer)FirefoxCP Isolated Web ContentClaude Helper (Renderer)iTerm2FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentClaudeMem...2,13 GB1,09 GB960,6 MB908,2 MB835,0 MB795,5 MB767,3 MB592,2 MB544,3 MB522,1 MB496,1 MB453,8 MB446,9 MB446,0 MB436,3 MB403,0 MB382,2 MB371,9 MB343,0 MB342,4 MB326,2 MB311,0 MB297,9 MB255,9 MB252,9 MB239,1 MB196,3 MB194,1 MBMEMORY PRESSUREPhysical Memory:Memory Used:Cached Files:Swap Used:100% <478Wed 15 Apr 14:23:38CPUMemoryDiskThreads3823267283251127302425241525262523152313202715272860EnergyPorts61019 2491257281 20312419 451169254244124121122186122123124120172118723131232081 786124128723PID83696407429748014146644203084283701146738019367133548035276418633583143652430164817326548368985091011483583360519487856138482986049116,00 GB13,93 GB <2,02 GB3,07 GBApp Memory:Wired Memory:Compressed:NetworkUserlukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas4,47 GB2,95 GB5,96 GB...
|
NULL
|
8822252547487628148
|
NULL
|
click
|
ocr
|
NULL
|
+SlackFileEditViewGoEDHomeDMsActivityFilesLater..• +SlackFileEditViewGoEDHomeDMsActivityFilesLater..•More+HistoryWindowHelp→Search Jiminny IncJiminny ...sos+# general# infra-changes# jiminny-bg# platform-tickets# product _launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...Direct messagesStoyan TanevVesGalya DimitrovaAneliya Angelova, ...Vasil Vasilev XSteliyan GeorgievAdelina Petrova, Ili...P. Adelina PetrovaD. Nikolay Nikolov2 Galya Dimitrova, Ni...#: AppsJira CloudToast# releases8 22+Messages@ FilesBookmarksCircleClv 2 new messagesDeploymentsuccessrui:Project: appWhen:04/15/202609:51:25Tag:View JobGitHub APP 1:53 PM2 new commits pushed tomaster by des-d0344ab16 - JY-20151: Enhance waveformdisplay with talk-to-listen ratio and stylingadjustments3c043232 - Merge pull request #11967from jiminny/JY-20151-add-talk-to-listen-to-the-waveform( jiminny/app Added by GitHubCircleCl APP 2:18 PMDeployment Successful!Project: appWhen:04/15/202611:18:51Tag:View JobMessage #releasesAaNewSupport Daily - in 37 mRActivity MonitorAll ProcessesProcess NameBoosteroidWindowServerFirefoxCP Isolated Web ContentFirefoxFirefoxFirefoxCP Isolated Web ContentCursorUlViewService (Not Responding)VTDecoderXPCServiceFirefox GPU HelperFirefox GPU HelperFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentSlack Helper (Renderer)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentNotion Calendar Helper (Renderer)FirefoxCP Isolated Web ContentclaudeNotion Helper (Renderer)FirefoxCP Isolated Web ContentClaude Helper (Renderer)iTerm2FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentClaudeMem...2,13 GB1,09 GB960,6 MB908,2 MB835,0 MB795,5 MB767,3 MB592,2 MB544,3 MB522,1 MB496,1 MB453,8 MB446,9 MB446,0 MB436,3 MB403,0 MB382,2 MB371,9 MB343,0 MB342,4 MB326,2 MB311,0 MB297,9 MB255,9 MB252,9 MB239,1 MB196,3 MB194,1 MBMEMORY PRESSUREPhysical Memory:Memory Used:Cached Files:Swap Used:100% <478Wed 15 Apr 14:23:38CPUMemoryDiskThreads3823267283251127302425241525262523152313202715272860EnergyPorts61019 2491257281 20312419 451169254244124121122186122123124120172118723131232081 786124128723PID83696407429748014146644203084283701146738019367133548035276418633583143652430164817326548368985091011483583360519487856138482986049116,00 GB13,93 GB <2,02 GB3,07 GBApp Memory:Wired Memory:Compressed:NetworkUserlukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas4,47 GB2,95 GB5,96 GB...
|
NULL
|
|
47690
|
1009
|
27
|
2026-04-17T11:55:36.740823+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776426936740_m1.jpg...
|
Firefox
|
Jiminny — Work
|
True
|
app.dev.jiminny.com/onboard
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Workers | Datadog
Developers | HubSpot
Developers Workers | Datadog
Developers | HubSpot
Developers | HubSpot
Inbox (1,576) - [EMAIL] - Jiminny Mail
Inbox (1,576) - [EMAIL] - Jiminny Mail
120216 is your HubSpot Log In Code - [EMAIL] - Jiminny Mail
120216 is your HubSpot Log In Code - [EMAIL] - Jiminny Mail
CloudWatch | eu-west-1
CloudWatch | eu-west-1
New Tab
New Tab
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
fix-cache-for-business-processes by ilian-jiminny · Pull Request #11985 · jiminny/app
fix-cache-for-business-processes by ilian-jiminny · Pull Request #11985 · jiminny/app
[JY-20692] Issue with reconnecting Zoho - Jira
[JY-20692] Issue with reconnecting Zoho - Jira
Jiminny
Jiminny
Close tab
Auth Proxy
Auth Proxy
Dashboard · Jiminny · Membrane
Dashboard · Jiminny · Membrane
App "Zoho CRM" · Jiminny · Membrane
App "Zoho CRM" · Jiminny · Membrane
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Update your information
Update your information
GENERAL
TIMEZONE
Select option Europe/Sofia (UTC +03:00)
Select option
Europe/Sofia (UTC +03:00)
*
LANGUAGES SPOKEN DURING CALLS
DEFAULT SPOKEN LANGUAGE
Select option English (United Kingdom)
Select option
English (United Kingdom)
*
If the language isn't detected we'll default to this one
Add language
CONNECT/SYNC SETTINGS
Connect Zoho CRM
zohocrm Sign in with Zoho CRM
Sign in with Zoho CRM
Import Calendar Meetings
*
google Sign in with Google
Sign in with Google
Let's Get Started!
Waiting for app.dev.jiminny.com…
Clear the Web Console output (⌘K, Ctrl+L)
Integr
Integr
1707 hidden
Clear filter input
Errors
Warnings
Info
Logs
Debug
CSS
XHR
Requests
Console Settings
Navigated to https://app.dev.jiminny.com/dashboard
XHR
GET
https://app.dev.jiminny.com/api/v1/integration-app-token
https://app.dev.jiminny.com/api/v1/integration-app-token
[HTTP/2
200
1450ms]
GET
https://ui.integration.app/embed/integrations/zohocrm/connect?token=[JWT_TOKEN]&showPoweredBy=false&allowMultipleConnections=
https://ui.integration.app/embed/integrations/zohocrm/connect?token=[JWT_TOKEN]&showPoweredBy=false&allowMultipleConnections=
[HTTP/2
200
226ms]
GET
https://ui.integration.app/assets/index-DCou__JW.js
https://ui.integration.app/assets/index-DCou__JW.js
[HTTP/3
200
0ms]...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Workers | Datadog","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Developers | HubSpot","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Developers | HubSpot","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Inbox (1,576) - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox (1,576) - lukas.kovalik@jiminny.com - Jiminny Mail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"120216 is your HubSpot Log In Code - integration-account@jiminny.com - Jiminny Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"120216 is your HubSpot Log In Code - integration-account@jiminny.com - Jiminny Mail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | eu-west-1","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | eu-west-1","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"fix-cache-for-business-processes by ilian-jiminny · Pull Request #11985 · jiminny/app","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"fix-cache-for-business-processes by ilian-jiminny · Pull Request #11985 · jiminny/app","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20692] Issue with reconnecting Zoho - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20692] Issue with reconnecting Zoho - Jira","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jiminny","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Auth Proxy","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Auth Proxy","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Dashboard · Jiminny · Membrane","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dashboard · Jiminny · Membrane","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"App \"Zoho CRM\" · Jiminny · Membrane","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"App \"Zoho CRM\" · Jiminny · Membrane","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Update your information","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Update your information","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GENERAL","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TIMEZONE","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select option Europe/Sofia (UTC +03:00)","depth":10,"value":"Select option Europe/Sofia (UTC +03:00)","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select option","depth":11,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Europe/Sofia (UTC +03:00)","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LANGUAGES SPOKEN DURING CALLS","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DEFAULT SPOKEN LANGUAGE","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select option English (United Kingdom)","depth":10,"value":"Select option English (United Kingdom)","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select option","depth":11,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"English (United Kingdom)","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the language isn't detected we'll default to this one","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add language","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CONNECT/SYNC SETTINGS","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Connect Zoho CRM","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"zohocrm Sign in with Zoho CRM","depth":10,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sign in with Zoho CRM","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Import Calendar Meetings","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"google Sign in with Google","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sign in with Google","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Let's Get Started!","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Waiting for app.dev.jiminny.com…","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Clear the Web Console output (⌘K, Ctrl+L)","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextField","text":"Integr","depth":15,"value":"Integr","role_description":"search text field","subrole":"AXSearchField","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Integr","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1707 hidden","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Clear filter input","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Errors","depth":15,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Warnings","depth":15,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Info","depth":15,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Logs","depth":15,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Debug","depth":15,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"CSS","depth":15,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"XHR","depth":15,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Requests","depth":15,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Console Settings","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Navigated to https://app.dev.jiminny.com/dashboard","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"XHR","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://app.dev.jiminny.com/api/v1/integration-app-token","depth":20,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"https://app.dev.jiminny.com/api/v1/integration-app-token","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[HTTP/2","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1450ms]","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://ui.integration.app/embed/integrations/zohocrm/connect?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjFlY2U2NmM4LWZlYjEtNGRmMS1iMzIxLTIxNjA3ZGFmNDYyMyIsIm5hbWUiOiJEZXYgWm9obyBDUk0gY2xpZW50IiwiaXNzIjoiNjg3YTU5ZjctMjI3Ni00ODZjLTgzMDYtMTQ1MDdmZDc5N2FlIiwiZXhwIjoxNzc2NTEwODMyLCJmaWVsZHMiOnsiZW52IjoibG9jYWwiLCJ3ZWJob29rVXJsIjoiaHR0cHM6Ly9xYXRlc3Q6UWFZZU14MS02NDJuYkBsdWthc2submdyb2suaW8iLCJldmVudEFjY291bnREZWxldGVkIjoiL3dlYmhvb2svaW50YXBwL2FjYy1kZWwiLCJldmVudENvbnRhY3REZWxldGVkIjoiL3dlYmhvb2svaW50YXBwL2NudC1kZWwiLCJldmVudFByb2ZpbGVEZWxldGVkIjoiL3dlYmhvb2svaW50YXBwL3Vzci1kZWwiLCJldmVudExlYWREZWxldGVkIjoiL3dlYmhvb2svaW50YXBwL2xkLWRlbCIsImV2ZW50RGVhbERlbGV0ZWQiOiIvd2ViaG9vay9pbnRhcHAvb3BwLWRlbCIsImV2ZW50QWNjb3VudENyZWF0ZWQiOiIvd2ViaG9vay9pbnRhcHAvYWNjLWFkZCIsImV2ZW50QWNjb3VudFVwZGF0ZWQiOiIvd2ViaG9vay9pbnRhcHAvYWNjLXVwZCIsImV2ZW50Q29udGFjdENyZWF0ZWQiOiIvd2ViaG9vay9pbnRhcHAvY250LWFkZCIsImV2ZW50Q29udGFjdFVwZGF0ZWQiOiIvd2ViaG9vay9pbnRhcHAvY250LXVwZCIsImV2ZW50UHJvZmlsZUNyZWF0ZWQiOiIvd2ViaG9vay9pbnRhcHAvdXNyLWFkZCIsImV2ZW50UHJvZmlsZVVwZGF0ZWQiOiIvd2ViaG9vay9pbnRhcHAvdXNyLXVwZCIsImV2ZW50TGVhZENyZWF0ZWQiOiIvd2ViaG9vay9pbnRhcHAvbGQtYWRkIiwiZXZlbnRMZWFkVXBkYXRlZCI6Ii93ZWJob29rL2ludGFwcC9sZC11cGQiLCJldmVudERlYWxDcmVhdGVkIjoiL3dlYmhvb2svaW50YXBwL29wcC1hZGQiLCJldmVudERlYWxVcGRhdGVkIjoiL3dlYmhvb2svaW50YXBwL29wcC11cGQifX0.cPowBZuDxoTPGjFBae4ToiaiHGn8n7ip72tabpSeGsg&showPoweredBy=false&allowMultipleConnections=","depth":20,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"https://ui.integration.app/embed/integrations/zohocrm/connect?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjFlY2U2NmM4LWZlYjEtNGRmMS1iMzIxLTIxNjA3ZGFmNDYyMyIsIm5hbWUiOiJEZXYgWm9obyBDUk0gY2xpZW50IiwiaXNzIjoiNjg3YTU5ZjctMjI3Ni00ODZjLTgzMDYtMTQ1MDdmZDc5N2FlIiwiZXhwIjoxNzc2NTEwODMyLCJmaWVsZHMiOnsiZW52IjoibG9jYWwiLCJ3ZWJob29rVXJsIjoiaHR0cHM6Ly9xYXRlc3Q6UWFZZU14MS02NDJuYkBsdWthc2submdyb2suaW8iLCJldmVudEFjY291bnREZWxldGVkIjoiL3dlYmhvb2svaW50YXBwL2FjYy1kZWwiLCJldmVudENvbnRhY3REZWxldGVkIjoiL3dlYmhvb2svaW50YXBwL2NudC1kZWwiLCJldmVudFByb2ZpbGVEZWxldGVkIjoiL3dlYmhvb2svaW50YXBwL3Vzci1kZWwiLCJldmVudExlYWREZWxldGVkIjoiL3dlYmhvb2svaW50YXBwL2xkLWRlbCIsImV2ZW50RGVhbERlbGV0ZWQiOiIvd2ViaG9vay9pbnRhcHAvb3BwLWRlbCIsImV2ZW50QWNjb3VudENyZWF0ZWQiOiIvd2ViaG9vay9pbnRhcHAvYWNjLWFkZCIsImV2ZW50QWNjb3VudFVwZGF0ZWQiOiIvd2ViaG9vay9pbnRhcHAvYWNjLXVwZCIsImV2ZW50Q29udGFjdENyZWF0ZWQiOiIvd2ViaG9vay9pbnRhcHAvY250LWFkZCIsImV2ZW50Q29udGFjdFVwZGF0ZWQiOiIvd2ViaG9vay9pbnRhcHAvY250LXVwZCIsImV2ZW50UHJvZmlsZUNyZWF0ZWQiOiIvd2ViaG9vay9pbnRhcHAvdXNyLWFkZCIsImV2ZW50UHJvZmlsZVVwZGF0ZWQiOiIvd2ViaG9vay9pbnRhcHAvdXNyLXVwZCIsImV2ZW50TGVhZENyZWF0ZWQiOiIvd2ViaG9vay9pbnRhcHAvbGQtYWRkIiwiZXZlbnRMZWFkVXBkYXRlZCI6Ii93ZWJob29rL2ludGFwcC9sZC11cGQiLCJldmVudERlYWxDcmVhdGVkIjoiL3dlYmhvb2svaW50YXBwL29wcC1hZGQiLCJldmVudERlYWxVcGRhdGVkIjoiL3dlYmhvb2svaW50YXBwL29wcC11cGQifX0.cPowBZuDxoTPGjFBae4ToiaiHGn8n7ip72tabpSeGsg&showPoweredBy=false&allowMultipleConnections=","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[HTTP/2","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"226ms]","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"https://ui.integration.app/assets/index-DCou__JW.js","depth":20,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"https://ui.integration.app/assets/index-DCou__JW.js","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[HTTP/3","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0ms]","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8822172248981353839
|
6440109110974883852
|
idle
|
accessibility
|
NULL
|
Workers | Datadog
Developers | HubSpot
Developers Workers | Datadog
Developers | HubSpot
Developers | HubSpot
Inbox (1,576) - [EMAIL] - Jiminny Mail
Inbox (1,576) - [EMAIL] - Jiminny Mail
120216 is your HubSpot Log In Code - [EMAIL] - Jiminny Mail
120216 is your HubSpot Log In Code - [EMAIL] - Jiminny Mail
CloudWatch | eu-west-1
CloudWatch | eu-west-1
New Tab
New Tab
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
fix-cache-for-business-processes by ilian-jiminny · Pull Request #11985 · jiminny/app
fix-cache-for-business-processes by ilian-jiminny · Pull Request #11985 · jiminny/app
[JY-20692] Issue with reconnecting Zoho - Jira
[JY-20692] Issue with reconnecting Zoho - Jira
Jiminny
Jiminny
Close tab
Auth Proxy
Auth Proxy
Dashboard · Jiminny · Membrane
Dashboard · Jiminny · Membrane
App "Zoho CRM" · Jiminny · Membrane
App "Zoho CRM" · Jiminny · Membrane
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Update your information
Update your information
GENERAL
TIMEZONE
Select option Europe/Sofia (UTC +03:00)
Select option
Europe/Sofia (UTC +03:00)
*
LANGUAGES SPOKEN DURING CALLS
DEFAULT SPOKEN LANGUAGE
Select option English (United Kingdom)
Select option
English (United Kingdom)
*
If the language isn't detected we'll default to this one
Add language
CONNECT/SYNC SETTINGS
Connect Zoho CRM
zohocrm Sign in with Zoho CRM
Sign in with Zoho CRM
Import Calendar Meetings
*
google Sign in with Google
Sign in with Google
Let's Get Started!
Waiting for app.dev.jiminny.com…
Clear the Web Console output (⌘K, Ctrl+L)
Integr
Integr
1707 hidden
Clear filter input
Errors
Warnings
Info
Logs
Debug
CSS
XHR
Requests
Console Settings
Navigated to https://app.dev.jiminny.com/dashboard
XHR
GET
https://app.dev.jiminny.com/api/v1/integration-app-token
https://app.dev.jiminny.com/api/v1/integration-app-token
[HTTP/2
200
1450ms]
GET
https://ui.integration.app/embed/integrations/zohocrm/connect?token=[JWT_TOKEN]&showPoweredBy=false&allowMultipleConnections=
https://ui.integration.app/embed/integrations/zohocrm/connect?token=[JWT_TOKEN]&showPoweredBy=false&allowMultipleConnections=
[HTTP/2
200
226ms]
GET
https://ui.integration.app/assets/index-DCou__JW.js
https://ui.integration.app/assets/index-DCou__JW.js
[HTTP/3
200
0ms]...
|
NULL
|
|
57624
|
1238
|
47
|
2026-04-20T12:00:46.741398+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776686446741_m1.jpg...
|
iTerm2
|
iTerm2
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹ >0 lhl100% <47ec2-user@ip-10-30-159-186:~DOCKER• ₫1DEV (docker)182APP (-zsh)Poetry could not find a pyproject.tomlfile in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ vprodEnter MFA code for arn:aws:iam::438740370364:mfa/[EMAIL]:Warning: Permanently added'jiminny-prod-ecs1' (ED25519) to the list of known hosts.Anewer release of "Amazon Linux" is available.Version 2023.10.20260105:Version 2023.10.20260120:Version 2023.10.20260202:Version 2023.10.20260216:Version 2023.10.20260302:Version 2023.10.20260325:Version 2023.10.20260330:Version 2023.11.20260406:Version 2023.11.20260413:Version 2023.8.20250707:Version 2023.8.20250715:Version 2023.8.20250721:Version 2023.8.20250808:Version 2023.8.20250818:Version 2023.8.20250908:Version 2023.8.20250915:Version 2023.9.20250929:Version 2023.9.20251014:Version 2023.9.20251020:Version 2023.9.20251027:Version 2023.9.20251105:Version 2023.9.20251110:Version 2023.9.20251117:Version 2023.9.20251208:Run "/usr/bin/dnf check-release-update" for full release and version update infoi tиH\_#####\\###|\#/Amazon Linux 2023 (ECS Optimized)V~'-zsh|screenpipe*• *58• Mon 20 Apr 15:00:46181ec2-user@ip-10-30-159-186:- (..*6For documentation, visit [URL_WITH_CREDENTIALS] ~]$ ||...
|
NULL
|
8821732638227663549
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹ >0 lhl100% <47ec2-user@ip-10-30-159-186:~DOCKER• ₫1DEV (docker)182APP (-zsh)Poetry could not find a pyproject.tomlfile in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ vprodEnter MFA code for arn:aws:iam::438740370364:mfa/[EMAIL]:Warning: Permanently added'jiminny-prod-ecs1' (ED25519) to the list of known hosts.Anewer release of "Amazon Linux" is available.Version 2023.10.20260105:Version 2023.10.20260120:Version 2023.10.20260202:Version 2023.10.20260216:Version 2023.10.20260302:Version 2023.10.20260325:Version 2023.10.20260330:Version 2023.11.20260406:Version 2023.11.20260413:Version 2023.8.20250707:Version 2023.8.20250715:Version 2023.8.20250721:Version 2023.8.20250808:Version 2023.8.20250818:Version 2023.8.20250908:Version 2023.8.20250915:Version 2023.9.20250929:Version 2023.9.20251014:Version 2023.9.20251020:Version 2023.9.20251027:Version 2023.9.20251105:Version 2023.9.20251110:Version 2023.9.20251117:Version 2023.9.20251208:Run "/usr/bin/dnf check-release-update" for full release and version update infoi tиH\_#####\\###|\#/Amazon Linux 2023 (ECS Optimized)V~'-zsh|screenpipe*• *58• Mon 20 Apr 15:00:46181ec2-user@ip-10-30-159-186:- (..*6For documentation, visit [URL_WITH_CREDENTIALS] ~]$ ||...
|
57622
|
|
58990
|
1268
|
2
|
2026-04-20T13:15:46.402122+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776690946402_m1.jpg...
|
Firefox
|
Firefox
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesTools→W FirefoxFileEditViewHistoryBookmarksProfilesTools→WindowHelpmeet.google.com/cxs-eips-npt?authuser=0Nikolay Nikolov (Presenting, annotating)laal100% <78• Mon 20 Apr 16:15:468+882 (JY-20615) Notity4T-20613) Aliowinny.atlassian.net/browse/JY-20501h LLM Leaderiboard.Q SearchAdd a comment.Suggest a replyWho is working on this..?status update..Yr000.30WConenLoeduonSyncProfile0ppoztunities.phpHow It WorksStep4Providers Supported (lines 51-61)• HubSpot• SalesforceBatching?No batching - Uses SyncOpportunitiesJob which calls syncOpportunities) :• Salesforce: One-by-one (inportOpportunity() in a loop)• HubSpot: In-memory buffer of 800, but still processes via processOpportunityßatch()Z (JY-20500) Batch2 (JY-20501) Batchi X0135:05 - Retner X2s Jminny - Calenda)D Meet - [PlattonC TODOC Debug cre-sync..- Kehne E Sentry W ts E Lean8 A chapter|• Homekevier© Rev ProphetQ MyPRsActionProfileCreated event fires when a new CRM profile is createdSyncProf$leOpportunities listener handles itDispatches SyncOpportunitiesJob with crm_proffle,id parameterUSes LAST_MOOIFIED_BY_PROFILE_SYNC_OPPORTUNITY_STRATEGY+ Createv DetailsFix versionsSprintDaysNeed QA|ParentCanny Linksv More fieldsOriginal estimateTime trackingAsk RovoNonePlatform Sprint 3 Q2NoneNo• JY-15971 CRM Synching ImprovemeOpen Canny LinksNo time logged> Automation 4 Rule executions› featureOS Open featureOs> Sentry sl! Unked IssuesCrested 24 Varch 2026 af1300wowewsnw?woaetheMon 20 Apr 16:16L Al BockmarxsAneliya AngelovaStefka Stoyanova3 othersNikolay Nikolovl meet.google.com is sharing your screen.Hidn4:15 PM | [Platform] Refinement •Lukas Kovalik1:13:58...
|
NULL
|
8821725808375479775
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesTools→W FirefoxFileEditViewHistoryBookmarksProfilesTools→WindowHelpmeet.google.com/cxs-eips-npt?authuser=0Nikolay Nikolov (Presenting, annotating)laal100% <78• Mon 20 Apr 16:15:468+882 (JY-20615) Notity4T-20613) Aliowinny.atlassian.net/browse/JY-20501h LLM Leaderiboard.Q SearchAdd a comment.Suggest a replyWho is working on this..?status update..Yr000.30WConenLoeduonSyncProfile0ppoztunities.phpHow It WorksStep4Providers Supported (lines 51-61)• HubSpot• SalesforceBatching?No batching - Uses SyncOpportunitiesJob which calls syncOpportunities) :• Salesforce: One-by-one (inportOpportunity() in a loop)• HubSpot: In-memory buffer of 800, but still processes via processOpportunityßatch()Z (JY-20500) Batch2 (JY-20501) Batchi X0135:05 - Retner X2s Jminny - Calenda)D Meet - [PlattonC TODOC Debug cre-sync..- Kehne E Sentry W ts E Lean8 A chapter|• Homekevier© Rev ProphetQ MyPRsActionProfileCreated event fires when a new CRM profile is createdSyncProf$leOpportunities listener handles itDispatches SyncOpportunitiesJob with crm_proffle,id parameterUSes LAST_MOOIFIED_BY_PROFILE_SYNC_OPPORTUNITY_STRATEGY+ Createv DetailsFix versionsSprintDaysNeed QA|ParentCanny Linksv More fieldsOriginal estimateTime trackingAsk RovoNonePlatform Sprint 3 Q2NoneNo• JY-15971 CRM Synching ImprovemeOpen Canny LinksNo time logged> Automation 4 Rule executions› featureOS Open featureOs> Sentry sl! Unked IssuesCrested 24 Varch 2026 af1300wowewsnw?woaetheMon 20 Apr 16:16L Al BockmarxsAneliya AngelovaStefka Stoyanova3 othersNikolay Nikolovl meet.google.com is sharing your screen.Hidn4:15 PM | [Platform] Refinement •Lukas Kovalik1:13:58...
|
NULL
|
|
13278
|
291
|
1
|
2026-04-14T12:17:38.478790+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776169058478_m2.jpg...
|
Sequel Ace
|
Open
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Favorites
jiminny
Recents
Applications
Documents
D Favorites
jiminny
Recents
Applications
Documents
Desktop
Downloads
lukas
iCloud
iCloud Drive
Sync folder
Tags
CRM
Orange
Red
Yellow
Green
Blue...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Favorites","depth":6,"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"jiminny","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Recents","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Applications","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Documents","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Desktop","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Downloads","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"iCloud","depth":6,"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"iCloud Drive","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Sync folder","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Tags","depth":6,"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"CRM","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Orange","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Red","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Yellow","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Green","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Blue","depth":6,"role_description":"text"}]...
|
8821601068618426030
|
3385618405277112156
|
click
|
accessibility
|
NULL
|
Favorites
jiminny
Recents
Applications
Documents
D Favorites
jiminny
Recents
Applications
Documents
Desktop
Downloads
lukas
iCloud
iCloud Drive
Sync folder
Tags
CRM
Orange
Red
Yellow
Green
Blue...
|
NULL
|
|
50540
|
1084
|
25
|
2026-04-17T14:59:33.230854+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776437973230_m2.jpg...
|
Finder
|
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Are you sure you want to delete “archive.db”?
This Are you sure you want to delete “archive.db”?
This item will be deleted immediately. You can’t undo this action.
Cancel
Delete...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Are you sure you want to delete “archive.db”?","depth":1,"bounds":{"left":0.45625,"top":0.2951389,"width":0.0875,"height":0.022222223},"automation_id":"_NS:78","role_description":"text"},{"role":"AXStaticText","text":"This item will be deleted immediately. You can’t undo this action.","depth":1,"bounds":{"left":0.45625,"top":0.32430556,"width":0.0875,"height":0.019444445},"automation_id":"_NS:58","role_description":"text"},{"role":"AXButton","text":"Cancel","depth":1,"bounds":{"left":0.453125,"top":0.35069445,"width":0.04765625,"height":0.027777778},"automation_id":"action-button--999","role_description":"button","is_enabled":true,"is_focused":true},{"role":"AXButton","text":"Delete","depth":1,"bounds":{"left":0.49921876,"top":0.35069445,"width":0.04765625,"height":0.027777778},"automation_id":"action-button--998","role_description":"button","is_enabled":true,"is_focused":false}]...
|
8821592432310654804
|
-2164032099497557758
|
visual_change
|
accessibility
|
NULL
|
Are you sure you want to delete “archive.db”?
This Are you sure you want to delete “archive.db”?
This item will be deleted immediately. You can’t undo this action.
Cancel
Delete...
|
50539
|
|
50541
|
1083
|
21
|
2026-04-17T14:59:36.157683+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776437976157_m1.jpg...
|
Finder
|
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Are you sure you want to delete “archive.db”?
This Are you sure you want to delete “archive.db”?
This item will be deleted immediately. You can’t undo this action.
Cancel
Delete...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Are you sure you want to delete “archive.db”?","depth":1,"automation_id":"_NS:78","role_description":"text"},{"role":"AXStaticText","text":"This item will be deleted immediately. You can’t undo this action.","depth":1,"automation_id":"_NS:58","role_description":"text"},{"role":"AXButton","text":"Cancel","depth":1,"automation_id":"action-button--999","role_description":"button","is_enabled":true,"is_focused":true},{"role":"AXButton","text":"Delete","depth":1,"automation_id":"action-button--998","role_description":"button","is_enabled":true,"is_focused":false}]...
|
8821592432310654804
|
-2164032099497557758
|
click
|
accessibility
|
NULL
|
Are you sure you want to delete “archive.db”?
This Are you sure you want to delete “archive.db”?
This item will be deleted immediately. You can’t undo this action.
Cancel
Delete...
|
50538
|
|
50882
|
1094
|
39
|
2026-04-17T15:33:55.822787+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776440035822_m2.jpg...
|
Finder
|
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Are you sure you want to delete “archive.db”?
This Are you sure you want to delete “archive.db”?
This item will be deleted immediately. You can’t undo this action.
Cancel
Delete...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Are you sure you want to delete “archive.db”?","depth":1,"bounds":{"left":0.45625,"top":0.2951389,"width":0.0875,"height":0.022222223},"automation_id":"_NS:78","role_description":"text"},{"role":"AXStaticText","text":"This item will be deleted immediately. You can’t undo this action.","depth":1,"bounds":{"left":0.45625,"top":0.32430556,"width":0.0875,"height":0.019444445},"automation_id":"_NS:58","role_description":"text"},{"role":"AXButton","text":"Cancel","depth":1,"bounds":{"left":0.453125,"top":0.35069445,"width":0.04765625,"height":0.027777778},"automation_id":"action-button--999","role_description":"button","is_enabled":true,"is_focused":true},{"role":"AXButton","text":"Delete","depth":1,"bounds":{"left":0.49921876,"top":0.35069445,"width":0.04765625,"height":0.027777778},"automation_id":"action-button--998","role_description":"button","is_enabled":true,"is_focused":false}]...
|
8821592432310654804
|
-2164032099497557758
|
visual_change
|
accessibility
|
NULL
|
Are you sure you want to delete “archive.db”?
This Are you sure you want to delete “archive.db”?
This item will be deleted immediately. You can’t undo this action.
Cancel
Delete...
|
NULL
|
|
50883
|
1093
|
49
|
2026-04-17T15:33:55.980651+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776440035980_m1.jpg...
|
Finder
|
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Are you sure you want to delete “archive.db”?
This Are you sure you want to delete “archive.db”?
This item will be deleted immediately. You can’t undo this action.
Cancel
Delete...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Are you sure you want to delete “archive.db”?","depth":1,"automation_id":"_NS:78","role_description":"text"},{"role":"AXStaticText","text":"This item will be deleted immediately. You can’t undo this action.","depth":1,"automation_id":"_NS:58","role_description":"text"},{"role":"AXButton","text":"Cancel","depth":1,"automation_id":"action-button--999","role_description":"button","is_enabled":true,"is_focused":true},{"role":"AXButton","text":"Delete","depth":1,"automation_id":"action-button--998","role_description":"button","is_enabled":true,"is_focused":false}]...
|
8821592432310654804
|
-2164032099497557758
|
click
|
accessibility
|
NULL
|
Are you sure you want to delete “archive.db”?
This Are you sure you want to delete “archive.db”?
This item will be deleted immediately. You can’t undo this action.
Cancel
Delete...
|
50880
|
|
50918
|
1094
|
58
|
2026-04-17T15:36:34.333321+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776440194333_m2.jpg...
|
Finder
|
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Are you sure you want to delete “archive.db”?
This Are you sure you want to delete “archive.db”?
This item will be deleted immediately. You can’t undo this action.
Cancel
Delete...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Are you sure you want to delete “archive.db”?","depth":1,"bounds":{"left":0.45625,"top":0.2951389,"width":0.0875,"height":0.022222223},"automation_id":"_NS:78","role_description":"text"},{"role":"AXStaticText","text":"This item will be deleted immediately. You can’t undo this action.","depth":1,"bounds":{"left":0.45625,"top":0.32430556,"width":0.0875,"height":0.019444445},"automation_id":"_NS:58","role_description":"text"},{"role":"AXButton","text":"Cancel","depth":1,"bounds":{"left":0.453125,"top":0.35069445,"width":0.04765625,"height":0.027777778},"automation_id":"action-button--999","role_description":"button","is_enabled":true,"is_focused":true},{"role":"AXButton","text":"Delete","depth":1,"bounds":{"left":0.49921876,"top":0.35069445,"width":0.04765625,"height":0.027777778},"automation_id":"action-button--998","role_description":"button","is_enabled":true,"is_focused":false}]...
|
8821592432310654804
|
-2164032099497557758
|
visual_change
|
accessibility
|
NULL
|
Are you sure you want to delete “archive.db”?
This Are you sure you want to delete “archive.db”?
This item will be deleted immediately. You can’t undo this action.
Cancel
Delete...
|
NULL
|
|
50919
|
1093
|
66
|
2026-04-17T15:36:35.937660+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776440195937_m1.jpg...
|
Finder
|
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Are you sure you want to delete “archive.db”?
This Are you sure you want to delete “archive.db”?
This item will be deleted immediately. You can’t undo this action.
Cancel
Delete...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Are you sure you want to delete “archive.db”?","depth":1,"automation_id":"_NS:78","role_description":"text"},{"role":"AXStaticText","text":"This item will be deleted immediately. You can’t undo this action.","depth":1,"automation_id":"_NS:58","role_description":"text"},{"role":"AXButton","text":"Cancel","depth":1,"automation_id":"action-button--999","role_description":"button","is_enabled":true,"is_focused":true},{"role":"AXButton","text":"Delete","depth":1,"automation_id":"action-button--998","role_description":"button","is_enabled":true,"is_focused":false}]...
|
8821592432310654804
|
-2164032099497557758
|
click
|
accessibility
|
NULL
|
Are you sure you want to delete “archive.db”?
This Are you sure you want to delete “archive.db”?
This item will be deleted immediately. You can’t undo this action.
Cancel
Delete...
|
NULL
|
|
56913
|
1228
|
47
|
2026-04-20T11:34:44.613043+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776684884613_m2.jpg...
|
Firefox
|
Firefox
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PnostorniVIewINavicateCodeLaravelKeтactol1001SWind PnostorniVIewINavicateCodeLaravelKeтactol1001SWindowheld- app.dev.jiminny.com/dashboardRookmarksQ Search bookmarksv x bookmarks loolba,Sprint Board# SRD QueueGithub8 Jiminny DEVAsk Jiminny Reports by nikolay-yankov. ..Circle Cl& PROD US8 Stagingss Sentry$> E Bookmarks Menu… Other Bookmarksму kecoralngsleam kecoralnesEveryones kecoraingsTrending this monthSort by: Most playedJy 19798 evaluation for ai activityJY-20553 | Improve crm-sync dela|SRD-6793) Les Mills activity typeJY-20698 handle failed field sync•JY-20692 change confirmation pa(JY-20543) AJ Reports > Trackina(UY-18909) (Part2) Automated repAsk Jiminny Reports by nikolay-yaNew Talu Product Growth Plattorm UserpilgU Useroilot I Loaaed-activityfix(security): composer dependerPipelines - jiminny/app) Feed - jiminny - Sentry8 Jiminnytuy-206921 Issue with reconnectinJY-20692 change confirmation pa(JY-20692] Issue with reconnectU ISRD-67871 Issue with reconnecti& Jiminny MCP Connector - Product-7 [JY-206761 Notify the user if a PaiProject Phoenix - Figma© Pipelines - jiminny/app6 fiminny - Circled- New TabJackiBater'Unknown Customer WProduct Team weekly syncSchedule (GThis WeekLive FeedWebiMihalWebJiminiWeblliminiWebJiminny Web SA shared in Slack &8activity with Robinson CrusoeFà Held: 5 Dec. 2024.7:26 PM.|Mihail Mihavlov listened to call h clDiscovery Call with EmaHeld: 22 Nov, 2024, 2:31 PM\Kaloyan Nikolov listened to call 6dDiscovery Call with EmaFà Held: 22 Nov. 2024. 2:31 PM |Jiminny Web SA shared in Slack 2activity with Robinson Crusoelđ Held: 29 Nov, 2024, 1:02 PM |Jiminny Web SA shared in Slack &activity with kobinson crusoelFà Held: 29 Nov. 2024. 1.02 PMJiminny Web SA shared in Slack o!activity with Robinson Crusoelđ Held: 29 Nov, 2024, 1:00 PMJiminJiminny Web SA shared in Slack &activity with Kobinson Crusoelf Held. 29 Nov 2024 1.00 PMWebJiminny Web SA shared in Slack o100% SMOn ZU AOr 14.34.44(') Duration: 2mlỞ Duration: 4mlỞ) Duration: 4ml5 Dec, 2024, 7:31 PM& Value: $10,0013 Dec. 2024.12:46 PMI& Value: $90,0003 Dec, 2024, 12:41 PM |£. Value: $90.00d• Duration: 171Ở Duration: 17.( Durntian. QlỞ Duration: 6clÀ, Value: $10.00129 Nov, 2024, 1:03 PM& Value: $10,00129 Nov. 2024. 1:01 PM& Value: $10,00129 Nov, 2024, 1:00 PM2 Value: C029 Nov 2024 12-54 PM...
|
NULL
|
8821302223524955540
|
NULL
|
app_switch
|
ocr
|
NULL
|
PnostorniVIewINavicateCodeLaravelKeтactol1001SWind PnostorniVIewINavicateCodeLaravelKeтactol1001SWindowheld- app.dev.jiminny.com/dashboardRookmarksQ Search bookmarksv x bookmarks loolba,Sprint Board# SRD QueueGithub8 Jiminny DEVAsk Jiminny Reports by nikolay-yankov. ..Circle Cl& PROD US8 Stagingss Sentry$> E Bookmarks Menu… Other Bookmarksму kecoralngsleam kecoralnesEveryones kecoraingsTrending this monthSort by: Most playedJy 19798 evaluation for ai activityJY-20553 | Improve crm-sync dela|SRD-6793) Les Mills activity typeJY-20698 handle failed field sync•JY-20692 change confirmation pa(JY-20543) AJ Reports > Trackina(UY-18909) (Part2) Automated repAsk Jiminny Reports by nikolay-yaNew Talu Product Growth Plattorm UserpilgU Useroilot I Loaaed-activityfix(security): composer dependerPipelines - jiminny/app) Feed - jiminny - Sentry8 Jiminnytuy-206921 Issue with reconnectinJY-20692 change confirmation pa(JY-20692] Issue with reconnectU ISRD-67871 Issue with reconnecti& Jiminny MCP Connector - Product-7 [JY-206761 Notify the user if a PaiProject Phoenix - Figma© Pipelines - jiminny/app6 fiminny - Circled- New TabJackiBater'Unknown Customer WProduct Team weekly syncSchedule (GThis WeekLive FeedWebiMihalWebJiminiWeblliminiWebJiminny Web SA shared in Slack &8activity with Robinson CrusoeFà Held: 5 Dec. 2024.7:26 PM.|Mihail Mihavlov listened to call h clDiscovery Call with EmaHeld: 22 Nov, 2024, 2:31 PM\Kaloyan Nikolov listened to call 6dDiscovery Call with EmaFà Held: 22 Nov. 2024. 2:31 PM |Jiminny Web SA shared in Slack 2activity with Robinson Crusoelđ Held: 29 Nov, 2024, 1:02 PM |Jiminny Web SA shared in Slack &activity with kobinson crusoelFà Held: 29 Nov. 2024. 1.02 PMJiminny Web SA shared in Slack o!activity with Robinson Crusoelđ Held: 29 Nov, 2024, 1:00 PMJiminJiminny Web SA shared in Slack &activity with Kobinson Crusoelf Held. 29 Nov 2024 1.00 PMWebJiminny Web SA shared in Slack o100% SMOn ZU AOr 14.34.44(') Duration: 2mlỞ Duration: 4mlỞ) Duration: 4ml5 Dec, 2024, 7:31 PM& Value: $10,0013 Dec. 2024.12:46 PMI& Value: $90,0003 Dec, 2024, 12:41 PM |£. Value: $90.00d• Duration: 171Ở Duration: 17.( Durntian. QlỞ Duration: 6clÀ, Value: $10.00129 Nov, 2024, 1:03 PM& Value: $10,00129 Nov. 2024. 1:01 PM& Value: $10,00129 Nov, 2024, 1:00 PM2 Value: C029 Nov 2024 12-54 PM...
|
NULL
|
|
79928
|
2081
|
42
|
2026-04-24T17:18:27.705292+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777051107705_m1.jpg...
|
Firefox
|
Screenpipe — Archive — Personal
|
True
|
http://192.168.0.242:8766
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
Close tab
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
New Tab
Customize sidebar
Open Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 6175.9MB]
Screenpipe
[archive.db · 6175.9MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
23
/
04
/
2026
Calendar
Monitor
Click timeline to seek · times in local timezone
APP TIMELINE — CLICK ANYWHERE TO PLAY FROM THAT POINT
09:30
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
23 Apr 13:47 · Firefox / Jy 20541 extract common traits by Vasil-Jiminny · Pull Request #12008 · jiminny/app — Work
⏮ 30s
◀ 10s
⏸ Pause
10s ▶
30s ⏭
0:00 / 10:30
iTerm2
Firefox
Slack
Alfred
PhpStorm
CleanShot X
Finder
QuickTime Player
Activity Monitor
Preview
Sequel Ace
Raycast
Music...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"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,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"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,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Le Chat Mistral (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Screenpipe [archive.db · 6175.9MB]","depth":7,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screenpipe","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[archive.db · 6175.9MB]","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Activity","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Audio","depth":7,"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,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Timetable","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Summary","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Date","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":8,"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,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Click timeline to seek · times in local timezone","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"APP TIMELINE — CLICK ANYWHERE TO PLAY FROM THAT POINT","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"09:30","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:00","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:30","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:00","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:30","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:00","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:30","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13:00","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13:30","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:00","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23 Apr 13:47 · Firefox / Jy 20541 extract common traits by Vasil-Jiminny · Pull Request #12008 · jiminny/app — Work","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏮ 30s","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"◀ 10s","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"⏸ Pause","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXButton","text":"10s ▶","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"30s ⏭","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0:00 / 10:30","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"iTerm2","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Slack","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Alfred","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PhpStorm","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CleanShot X","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Finder","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QuickTime Player","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity Monitor","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Preview","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sequel Ace","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Raycast","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Music","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8821219922208724718
|
5257740640892535311
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
Close tab
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
New Tab
Customize sidebar
Open Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 6175.9MB]
Screenpipe
[archive.db · 6175.9MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
23
/
04
/
2026
Calendar
Monitor
Click timeline to seek · times in local timezone
APP TIMELINE — CLICK ANYWHERE TO PLAY FROM THAT POINT
09:30
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
23 Apr 13:47 · Firefox / Jy 20541 extract common traits by Vasil-Jiminny · Pull Request #12008 · jiminny/app — Work
⏮ 30s
◀ 10s
⏸ Pause
10s ▶
30s ⏭
0:00 / 10:30
iTerm2
Firefox
Slack
Alfred
PhpStorm
CleanShot X
Finder
QuickTime Player
Activity Monitor
Preview
Sequel Ace
Raycast
Music...
|
79926
|
|
79929
|
2082
|
48
|
2026-04-24T17:18:28.328874+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777051108328_m2.jpg...
|
Firefox
|
Screenpipe — Archive — Personal
|
True
|
http://192.168.0.242:8766
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
Close tab
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
New Tab
Customize sidebar
Open Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 6175.9MB]
Screenpipe
[archive.db · 6175.9MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
23
/
04
/
2026
Calendar
Monitor
Click timeline to seek · times in local timezone
APP TIMELINE — CLICK ANYWHERE TO PLAY FROM THAT POINT
09:30
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
23 Apr 13:47 · Firefox / Jy 20541 extract common traits by Vasil-Jiminny · Pull Request #12008 · jiminny/app — Work
⏮ 30s
◀ 10s
⏸ Pause
10s ▶
30s ⏭
0:00 / 10:30
iTerm2
Firefox
Slack
Alfred
PhpStorm
CleanShot X
Finder
QuickTime Player
Activity Monitor
Preview
Sequel Ace
Raycast
Music...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0018284575,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.03856383,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.07513298,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.0,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.013297873,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.0,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.013297873,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.0,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.013297873,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.0,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.013297873,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.0,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.013297873,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.0,"top":0.2585794,"width":0.113696806,"height":0.032721467},"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.013297873,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.10139628,"top":0.26576218,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.0,"top":0.29130086,"width":0.113696806,"height":0.032721467},"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.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.0,"top":0.32402235,"width":0.113696806,"height":0.032721467},"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.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.0,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.013297873,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.0,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.013297873,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.0,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.013297873,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.0,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.013297873,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.0,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.013297873,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.0,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.013297873,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.0,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.013297873,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.58739024,"width":0.108211435,"height":0.025538707},"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},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Le Chat Mistral (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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},"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},"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},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Screenpipe [archive.db · 6175.9MB]","depth":7,"bounds":{"left":0.12034574,"top":0.061452515,"width":0.06499335,"height":0.017956903},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screenpipe","depth":8,"bounds":{"left":0.12034574,"top":0.06304868,"width":0.027759308,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[archive.db · 6175.9MB]","depth":9,"bounds":{"left":0.14943483,"top":0.06703911,"width":0.035904255,"height":0.009976057},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Activity","depth":7,"bounds":{"left":0.18999335,"top":0.059856344,"width":0.024767287,"height":0.0207502},"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.21542554,"top":0.059856344,"width":0.023603724,"height":0.0207502},"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.23969415,"top":0.059856344,"width":0.021110373,"height":0.0207502},"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.26146942,"top":0.059856344,"width":0.034906916,"height":0.0207502},"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.29704124,"top":0.059856344,"width":0.029753989,"height":0.0207502},"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.3274601,"top":0.059856344,"width":0.034242023,"height":0.0207502},"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},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23","depth":9,"bounds":{"left":0.9552859,"top":0.06464485,"width":0.0048204786,"height":0.011572227},"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},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":9,"bounds":{"left":0.9644282,"top":0.06464485,"width":0.0048204786,"height":0.011572227},"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},"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},"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},"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.34740692,"top":0.10853951,"width":0.013464096,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Click timeline to seek · times in local timezone","depth":9,"bounds":{"left":0.3984375,"top":0.10853951,"width":0.080119684,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"APP TIMELINE — CLICK ANYWHERE TO PLAY FROM THAT POINT","depth":10,"bounds":{"left":0.35239363,"top":0.14644852,"width":0.112865694,"height":0.009976057},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"09:30","depth":12,"bounds":{"left":0.37300533,"top":0.19513169,"width":0.00880984,"height":0.008778931},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:00","depth":12,"bounds":{"left":0.41589096,"top":0.19513169,"width":0.008144947,"height":0.008778931},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10:30","depth":12,"bounds":{"left":0.45844415,"top":0.19513169,"width":0.008144947,"height":0.008778931},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:00","depth":12,"bounds":{"left":0.50116354,"top":0.19513169,"width":0.0078125,"height":0.008778931},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11:30","depth":12,"bounds":{"left":0.5437167,"top":0.19513169,"width":0.0076462766,"height":0.008778931},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:00","depth":12,"bounds":{"left":0.58610374,"top":0.19513169,"width":0.008144947,"height":0.008778931},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12:30","depth":12,"bounds":{"left":0.6286569,"top":0.19513169,"width":0.008144947,"height":0.008778931},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13:00","depth":12,"bounds":{"left":0.6710439,"top":0.19513169,"width":0.00831117,"height":0.008778931},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13:30","depth":12,"bounds":{"left":0.71359706,"top":0.19513169,"width":0.00831117,"height":0.008778931},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:00","depth":12,"bounds":{"left":0.75615025,"top":0.19513169,"width":0.00831117,"height":0.008778931},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23 Apr 13:47 · Firefox / Jy 20541 extract common traits by Vasil-Jiminny · Pull Request #12008 · jiminny/app — Work","depth":10,"bounds":{"left":0.35172874,"top":0.23264167,"width":0.21758644,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"⏮ 30s","depth":9,"bounds":{"left":0.35172874,"top":0.6775738,"width":0.023936171,"height":0.02434158},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"◀ 10s","depth":9,"bounds":{"left":0.37832448,"top":0.67797285,"width":0.02244016,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"⏸ Pause","depth":9,"bounds":{"left":0.4034242,"top":0.6775738,"width":0.027925532,"height":0.02434158},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXButton","text":"10s ▶","depth":9,"bounds":{"left":0.4340093,"top":0.67797285,"width":0.022273935,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"30s ⏭","depth":9,"bounds":{"left":0.45894283,"top":0.6775738,"width":0.024102394,"height":0.02434158},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0:00 / 10:30","depth":10,"bounds":{"left":0.7408577,"top":0.6843575,"width":0.021110373,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"iTerm2","depth":9,"bounds":{"left":0.35239363,"top":0.7198723,"width":0.011801862,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":9,"bounds":{"left":0.37250665,"top":0.7198723,"width":0.011801862,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Slack","depth":9,"bounds":{"left":0.39261967,"top":0.7198723,"width":0.009474734,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Alfred","depth":9,"bounds":{"left":0.41040558,"top":0.7198723,"width":0.010472074,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PhpStorm","depth":9,"bounds":{"left":0.42918882,"top":0.7198723,"width":0.017287234,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CleanShot X","depth":9,"bounds":{"left":0.45478722,"top":0.7198723,"width":0.021609042,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Finder","depth":9,"bounds":{"left":0.48470744,"top":0.7198723,"width":0.010970744,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QuickTime Player","depth":9,"bounds":{"left":0.50398934,"top":0.7198723,"width":0.030086435,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity Monitor","depth":9,"bounds":{"left":0.54238695,"top":0.7198723,"width":0.027426861,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Preview","depth":9,"bounds":{"left":0.578125,"top":0.7198723,"width":0.013630319,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sequel Ace","depth":9,"bounds":{"left":0.6000665,"top":0.7198723,"width":0.019614361,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Raycast","depth":9,"bounds":{"left":0.62799203,"top":0.7198723,"width":0.013630319,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Music","depth":9,"bounds":{"left":0.6499335,"top":0.7198723,"width":0.010305851,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8821219922208724718
|
5257740640892535311
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
Close tab
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
New Tab
Customize sidebar
Open Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe [archive.db · 6175.9MB]
Screenpipe
[archive.db · 6175.9MB]
Activity
Search
Audio
Work Report
Timetable
AI Summary
Date
23
/
04
/
2026
Calendar
Monitor
Click timeline to seek · times in local timezone
APP TIMELINE — CLICK ANYWHERE TO PLAY FROM THAT POINT
09:30
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
23 Apr 13:47 · Firefox / Jy 20541 extract common traits by Vasil-Jiminny · Pull Request #12008 · jiminny/app — Work
⏮ 30s
◀ 10s
⏸ Pause
10s ▶
30s ⏭
0:00 / 10:30
iTerm2
Firefox
Slack
Alfred
PhpStorm
CleanShot X
Finder
QuickTime Player
Activity Monitor
Preview
Sequel Ace
Raycast
Music...
|
NULL
|
|
66668
|
1499
|
9
|
2026-04-21T14:55:06.380709+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776783306380_m1.jpg...
|
Slack
|
Aneliya Angelova, Nikolay Yankov, Steliyan Georgie Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev (DM) - Jiminny Inc - 1 new item - 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
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
c-learning-people
confusion-clinic
curiosity_lab
engineering
frontend
general
infra-changes
jiminny-bg
people-with-copilot-licences
people-with-zoom-phone-licences
platform-team
platform-tickets
product_launches
random
releases
support
thank-yous
the_people_of_jiminny
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Aneliya Angelova
Mario Georgiev
Nikolay Yankov
Todor Stamatov
Gabriela Dureva
Petko Kashinski
Vasil Vasilev
Nikolay Nikolov
Galya Dimitrova
Stefka Stoyanova
Stoyan Tomov
Stoyan Tanev
Nikolay Ivanov
Ves
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Aneliya Angelova
Today at 5:35:11 PM
5:35 PM
когато създавам exec report например през киоска
избирам Teams, koeto nqma нищо общо с шерването и после в UI виждам тези тимове като Shared With
2 files
Toggle 2 files
Download all
image.png
image.png
Today at 5:36:07 PM
5:36
eto go reporta w kiosk
image.png
Toggle file
image.png
Today at 5:36:33 PM
5:36
той трябва да се шерне само с Web Service Account 2
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:40:40 PM
5:40
вие нали използвате тази колона
groups
в момента при новите репорти за да сложите тимовете с които се шерва, а при репортите в киоска няма шерване с екипи и в тази колона за екипите от чиито активитита се филтрират активитита за репортите
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 5:41:02 PM
5:41 PM
да
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:41:09 PM
5:41
може ли да се чуем само да вид на прод
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:41:47 PM
5:41
или пак то може и без
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:41:51 PM
5:41
сега ще видя
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Aneliya Angelova
Today at 5:43:08 PM
5:43 PM
може да се чуем да
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:43:09 PM
5:43
само кажи
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Todor Stamatov, Direct Message, 1 of 15 suggestions
Channel
Aneliya Angelova...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"c-learning-people","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"infra-changes","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"people-with-copilot-licences","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"people-with-zoom-phone-licences","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"platform-team","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Mario Georgiev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Todor Stamatov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Gabriela Dureva","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Petko Kashinski","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tomov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Ves","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":17,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":19,"role_description":"text"},{"role":"AXRadioButton","text":"Add canvas","depth":18,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add canvas","depth":20,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":17,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":19,"role_description":"text"},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":17,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":17,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":23,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Aneliya Angelova","depth":24,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"Today at 5:35:11 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:35 PM","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"когато създавам exec report например през киоска","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"избирам Teams, koeto nqma нищо общо с шерването и после в UI виждам тези тимове като Shared With","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"2 files","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXButton","text":"Toggle 2 files","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Download all","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"image.png","depth":25,"role_description":"Unlabelled image","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"image.png","depth":25,"role_description":"Unlabelled image","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 5:36:07 PM","depth":25,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:36","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"eto go reporta w kiosk","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"image.png","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXButton","text":"Toggle file","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXLink","text":"image.png","depth":27,"role_description":"Unlabelled image","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 5:36:33 PM","depth":25,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:36","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"той трябва да се шерне само с Web Service Account 2","depth":25,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 5:40:40 PM","depth":25,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:40","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"вие нали използвате тази колона","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"groups","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"в момента при новите репорти за да сложите тимовете с които се шерва, а при репортите в киоска няма шерване с екипи и в тази колона за екипите от чиито активитита се филтрират активитита за репортите","depth":25,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":24,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"Today at 5:41:02 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:41 PM","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"да","depth":25,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 5:41:09 PM","depth":25,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:41","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"може ли да се чуем само да вид на прод","depth":25,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 5:41:47 PM","depth":25,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:41","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"или пак то може и без","depth":25,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 5:41:51 PM","depth":25,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:41","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"сега ще видя","depth":25,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Aneliya Angelova","depth":24,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"Today at 5:43:08 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:43 PM","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"може да се чуем да","depth":25,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 5:43:09 PM","depth":25,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:43","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"само кажи","depth":25,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"","depth":23,"value":"","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Todor Stamatov, Direct Message, 1 of 15 suggestions","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"Channel","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":13,"role_description":"text"}]...
|
8820679427475360461
|
-5891950923631653808
|
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
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
c-learning-people
confusion-clinic
curiosity_lab
engineering
frontend
general
infra-changes
jiminny-bg
people-with-copilot-licences
people-with-zoom-phone-licences
platform-team
platform-tickets
product_launches
random
releases
support
thank-yous
the_people_of_jiminny
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Aneliya Angelova
Mario Georgiev
Nikolay Yankov
Todor Stamatov
Gabriela Dureva
Petko Kashinski
Vasil Vasilev
Nikolay Nikolov
Galya Dimitrova
Stefka Stoyanova
Stoyan Tomov
Stoyan Tanev
Nikolay Ivanov
Ves
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Aneliya Angelova
Today at 5:35:11 PM
5:35 PM
когато създавам exec report например през киоска
избирам Teams, koeto nqma нищо общо с шерването и после в UI виждам тези тимове като Shared With
2 files
Toggle 2 files
Download all
image.png
image.png
Today at 5:36:07 PM
5:36
eto go reporta w kiosk
image.png
Toggle file
image.png
Today at 5:36:33 PM
5:36
той трябва да се шерне само с Web Service Account 2
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:40:40 PM
5:40
вие нали използвате тази колона
groups
в момента при новите репорти за да сложите тимовете с които се шерва, а при репортите в киоска няма шерване с екипи и в тази колона за екипите от чиито активитита се филтрират активитита за репортите
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 5:41:02 PM
5:41 PM
да
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:41:09 PM
5:41
може ли да се чуем само да вид на прод
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:41:47 PM
5:41
или пак то може и без
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:41:51 PM
5:41
сега ще видя
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Aneliya Angelova
Today at 5:43:08 PM
5:43 PM
може да се чуем да
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:43:09 PM
5:43
само кажи
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Todor Stamatov, Direct Message, 1 of 15 suggestions
Channel
Aneliya Angelova
iTerm2ShellEditViewSessionScriptsProfilesWindowHelp100% <78Tue 21 Apr 17:55:06•• 0DOCKERDOCKER (docker-compose)docker_lamp_11/fd/1'2>&1docker_1amp_1S]1S DONEdocker_lamp_11proc/1/fd/1'2>&1docker_lamp_11sDONEdocker_lamp_11/fd/1'2>&1docker_lamp_11tches=15]3sDONEdocker_1amp_1*/proc/1/fd/1' 2>&1docker_lamp_1STAGE (ssh)-zsh182* Build full da...• ₴3|-zsh84screenpipe"O 85181APP (-zsh)|ec2-user@ip-..• 88-zsh1 '/usr/local/bin/php' 'artisan' dialers:monitor-activities › */proc/2026-04-21 14:54:04 Running ['artisan'jiminny:monitor-social-account1 '/usr/local/bin/php' 'artisan'2026-04-21 14:54:05 Running ['artisan'jiminny:monitor-social-accountsmailbox:skip-lists:refresh]1 '/usr/local/bin/php' 'artisan'mailbox:skip-lists:refresh › '/proc/2026-04-21 14:54:07 Running ['artisan'mailbox:batch:process --max-ba1 '/usr/local/bin/php' 'artisan' mailbox:batch:process --max-batches=2026-04-21 14:54:10 Running ['artisan' conference:monitor:count] ...docker_lamp_1fd/1' 2>&1docker_lamp_1ew]7S DONEdocker_lamp_1/proc/1/fd/1'2>&1docker_1amp_13s DONEdocker_lamp_1c/1/fd/1'2>&1docker_lamp_1docker_1amp_1docker_lamp_1docker_lamp_11s DONEdocker_lamp_1fd/1'2>&1docker_lamp_11sDONEdocker_lamp_11/fd/1'2>&1docker_1amp_1S]1S DONEdocker_lamp_1proc/1/fd/1' 2>&11 '/usr/local/bin/php' 'artisan' conference:monitor: count › */proc/1/2026-04-21 14:54:15 Running ['artisan' activity:aircall:check-and-ren1 '/usr/local/bin/php' 'artisan' activity:aircall: check-and-renew > '2026-04-21 14:54:22 Running ['artisan' track:retry-failed-downloads]1 '/usr/local/bin/php' 'artisan' track:retry-failed-downloads › '/prorun_artisan_schedule: Done waiting for schedule:run2026-04-21 14:55:02 Running ['artisan' meeting-bot:schedule-bot]1 '/usr/local/bin/php' 'artisan' meeting-bot: schedule-bot › '/proc/1/2026-04-21 14:55:03 Running ['artisan' dialers:monitor-activities] .1 '/usr/local/bin/php' 'artisan' dialers:monitor-activities › '/proc/2026-04-21 14:55:04 Running ['artisan' jiminny:monitor-social-account1 '/usr/local/bin/php' 'artisan' jiminny:monitor-social-accounts › '/View in Docker DesktopView ConfigEnable Watch-zsh|• ₴7|PROD (ssh)'do-release-upgrade' to upgrade to it.PROD*** System restart required ***Last login: Mon Apr 20 15:14:15 2026 from 212.5.153.87lukas@jiminny-prod-bastion:~$ UX L3 EU (ssh)New release '24.04.4 LTS' available.Run'do-release-upgrade'to upgrade to it.*** System restart required ***Lastlogin: Mon Apr 20 15:14:23 2026 from 212.5.153.87lukas@jiminny-eu-bastion:~$T4STAGE (ssh)New release '24.04.4 LTS' available.Run 'do-release-upgrade' to upgrade to it.STAGELast login: Thu Apr 16 07:34:39 2026 from 212.39.71.189n:-$T5 QA (-zsh)Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentsX T6 FE (-zsh)Poetry could not find a pyproject.toml file in /Users/lukas or its parentsFRONTENDPoetry could not find a pyproject.toml file in /Users/lukas or its parentsLukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ IX 17 EXT (-zsh)Last login: Mon Apr 20 19:48:04 on ttys005Poetry could not find a pyproject.toml file in /Users/lukas or its parentsEXTENSIONPoetry could not find a pyproject.toml file in /Users/lukas or its parentsukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $...
|
NULL
|
|
66693
|
1499
|
21
|
2026-04-21T14:57:00.110842+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776783420110_m1.jpg...
|
Slack
|
Aneliya Angelova, Nikolay Yankov, Steliyan Georgie Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev (DM) - Jiminny Inc - 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
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
c-learning-people
confusion-clinic
curiosity_lab
engineering
frontend
general
infra-changes
jiminny-bg
people-with-copilot-licences
people-with-zoom-phone-licences
platform-team
platform-tickets
product_launches
random
releases
support
thank-yous
the_people_of_jiminny
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Aneliya Angelova
Mario Georgiev
Nikolay Yankov
Todor Stamatov
Gabriela Dureva
Petko Kashinski
Vasil Vasilev
Nikolay Nikolov
Galya Dimitrova
Stefka Stoyanova
Stoyan Tomov
Stoyan Tanev
Nikolay Ivanov
Ves
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Aneliya Angelova
Today at 5:35:11 PM
5:35 PM
когато създавам exec report например през киоска
избирам Teams, koeto nqma нищо общо с шерването и после в UI виждам тези тимове като Shared With
2 files
Toggle 2 files
Download all
image.png
image.png
Today at 5:36:07 PM
5:36
eto go reporta w kiosk
image.png
Toggle file
image.png
Today at 5:36:33 PM
5:36
той трябва да се шерне само с Web Service Account 2
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:40:40 PM
5:40
вие нали използвате тази колона
groups
в момента при новите репорти за да сложите тимовете с които се шерва, а при репортите в киоска няма шерване с екипи и в тази колона за екипите от чиито активитита се филтрират активитита за репортите
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 5:41:02 PM
5:41 PM
да
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:41:09 PM
5:41
може ли да се чуем само да вид на прод
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:41:47 PM
5:41
или пак то може и без
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:41:51 PM
5:41
сега ще видя
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Aneliya Angelova
Today at 5:43:08 PM
5:43 PM
може да се чуем да
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:43:09 PM
5:43
само кажи
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Todor Stamatov, Direct Message, 1 of 15 suggestions
Channel
Aneliya Angelova...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-x-integration-app","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"c-learning-people","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"infra-changes","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"people-with-copilot-licences","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"people-with-zoom-phone-licences","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"platform-team","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Mario Georgiev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Todor Stamatov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Gabriela Dureva","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Petko Kashinski","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tomov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Ves","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":17,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":19,"role_description":"text"},{"role":"AXRadioButton","text":"Add canvas","depth":18,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add canvas","depth":20,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":17,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":19,"role_description":"text"},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":17,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":17,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":23,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Aneliya Angelova","depth":24,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"Today at 5:35:11 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:35 PM","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"когато създавам exec report например през киоска","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"избирам Teams, koeto nqma нищо общо с шерването и после в UI виждам тези тимове като Shared With","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"2 files","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXButton","text":"Toggle 2 files","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Download all","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"image.png","depth":25,"role_description":"Unlabelled image","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"image.png","depth":25,"role_description":"Unlabelled image","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 5:36:07 PM","depth":25,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:36","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"eto go reporta w kiosk","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"image.png","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXButton","text":"Toggle file","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXLink","text":"image.png","depth":27,"role_description":"Unlabelled image","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 5:36:33 PM","depth":25,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:36","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"той трябва да се шерне само с Web Service Account 2","depth":25,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 5:40:40 PM","depth":25,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:40","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"вие нали използвате тази колона","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"groups","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"в момента при новите репорти за да сложите тимовете с които се шерва, а при репортите в киоска няма шерване с екипи и в тази колона за екипите от чиито активитита се филтрират активитита за репортите","depth":25,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":24,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"Today at 5:41:02 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:41 PM","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"да","depth":25,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 5:41:09 PM","depth":25,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:41","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"може ли да се чуем само да вид на прод","depth":25,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 5:41:47 PM","depth":25,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:41","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"или пак то може и без","depth":25,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 5:41:51 PM","depth":25,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:41","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"сега ще видя","depth":25,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Aneliya Angelova","depth":24,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"Today at 5:43:08 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:43 PM","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"може да се чуем да","depth":25,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 5:43:09 PM","depth":25,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5:43","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"само кажи","depth":25,"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"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,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"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,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"","depth":23,"value":"","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Todor Stamatov, Direct Message, 1 of 15 suggestions","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"Channel","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":13,"role_description":"text"}]...
|
8820679427475360461
|
-5891950923631653808
|
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
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
c-learning-people
confusion-clinic
curiosity_lab
engineering
frontend
general
infra-changes
jiminny-bg
people-with-copilot-licences
people-with-zoom-phone-licences
platform-team
platform-tickets
product_launches
random
releases
support
thank-yous
the_people_of_jiminny
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Aneliya Angelova
Mario Georgiev
Nikolay Yankov
Todor Stamatov
Gabriela Dureva
Petko Kashinski
Vasil Vasilev
Nikolay Nikolov
Galya Dimitrova
Stefka Stoyanova
Stoyan Tomov
Stoyan Tanev
Nikolay Ivanov
Ves
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Aneliya Angelova
Today at 5:35:11 PM
5:35 PM
когато създавам exec report например през киоска
избирам Teams, koeto nqma нищо общо с шерването и после в UI виждам тези тимове като Shared With
2 files
Toggle 2 files
Download all
image.png
image.png
Today at 5:36:07 PM
5:36
eto go reporta w kiosk
image.png
Toggle file
image.png
Today at 5:36:33 PM
5:36
той трябва да се шерне само с Web Service Account 2
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:40:40 PM
5:40
вие нали използвате тази колона
groups
в момента при новите репорти за да сложите тимовете с които се шерва, а при репортите в киоска няма шерване с екипи и в тази колона за екипите от чиито активитита се филтрират активитита за репортите
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 5:41:02 PM
5:41 PM
да
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:41:09 PM
5:41
може ли да се чуем само да вид на прод
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:41:47 PM
5:41
или пак то може и без
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:41:51 PM
5:41
сега ще видя
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Aneliya Angelova
Today at 5:43:08 PM
5:43 PM
може да се чуем да
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 5:43:09 PM
5:43
само кажи
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Todor Stamatov, Direct Message, 1 of 15 suggestions
Channel
Aneliya Angelova
iTerm2ShellEditViewSessionScriptsProfilesWindowHelp•• 0DOCKER₴81DOCKER (docker-compose)-zsh₴82* Build full da...• ₴3-zsh841sDONEdocker_lamp_11/fd/1'1 '/usr/local/bin/php' 'artisan' dialers:monitor-activities › '/proc/2>81docker_1amp_12026-04-21 14:56:05 Running ['artisan'jiminny:monitor-social-accountSJdocker_lamp_11 '/usr/local/bin/php' 'artisan'jiminny:monitor-social-accounts > '/proc/1/fd/1'2>&1docker_1amp_12026-04-21 14:56:06 Running ['artisan'mailbox:skip-lists:refresh]1sDONEdocker_lamp_11 '/usr/local/bin/php' 'artisan'mailbox: skip-lists:refresh > '/proc/1/fd/1'2>&1docker_lamp_12026-04-21 14:56:08 Running ['artisan'mailbox:batch:process --max-batches=15]1s DONEdocker_1amp_11 '/usr/local/bin/php' 'artisan' mailbox:batch:process --max-batches=15 >*/proc/1/fd/1' 2>&1docker_lamp_112026-04-21 14:56:09 Running ['artisan'conference:monitor:count]1s DONEdocker_1amp_11 '/usr/local/bin/php' 'artisan' conference:monitor: count › */proc/1/fd/1' 2>&1docker_lamp_12026-04-21 14:56:10 Running ['artisan'activity:notify-not-logged]1sDONEdocker_lamp_11/fd/1'1 '/usr/local/bin/php' 'artisan'activity:notify-not-logged › '/proc/2>81docker_lamp_12026-04-21 14:56:11 Running ['artisan'activity:status-count]{"canceled":44}..1s DONEdocker_lamp_11'1 '/usr/local/bin/php' 'artisan' activity:status-count › '/proc/1/fd/2>&1docker_1amp_12026-04-21 14:56:12 Running ['artisan' mailbox:sync] Queueing 2 inbox(es)forsync.docker_lamp_1docker_lamp_1docker_lamp_16S DONE/usr/local/bin/php' 'artisan' mailbox:sync › '/proc/1/fd/1' 2>&1docker_1amp_1docker_lamp_1run_artisan_schedule: Done waitingfor schedule: run2026-04-21 14:56:19 Jiminny\Jobs\Mailbox\SyncInboxRUNNINGdocker_lamp_12026-04-21 14:56:19 Jiminny\Jobs\Mailbox\SyncInbox38.08msDONEdocker_1amp_12026-04-21 14:56:19 Jiminny\Jobs\Mailbox\SyncInboxRUNNINGdocker_lamp_12026-04-21 14:56:20Jiminny Jobs Mailbox \Syncinbox1sDONEView in Docker DesktopView ConfigEnable Watch100% <78Tue 21 Apr 17:56:59STAGE (ssh)screenpipe"О 85T2181-zsh|APP (-zsh)• ₴7|ec2-user@ip-...• 88-zsh+PROD (ssh)Run'do-release-upgrade' to upgrade to it.PROD*** System restart required ***Last login: Mon Apr 20 15:14:15 2026 from 212.5.153.87lukas@jiminny-prod-bastion:~$ UX L3 EU (ssh)New release '24.04.4 LTS' available.Run'do-release-upgrade'to upgrade to it.System restart required ***login: Mon Apr 20 15:14:23 2026 from 212.5.153.87lukas@jiminny-eu-bastion:~$ ||T4STAGE (ssh)New release '24.04.4 LTS' available.Run 'do-release-upgrade' to upgrade to it.STAGELast login: Thu Apr 16 07:34:39 2026 from 212.39.71.189n:-$T5 QA (-zsh)Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentsX T6 FE (-zsh)Poetry could not find a pyproject.toml file in /Users/lukas or its parentsFRONTENDPoetry could not find a pyproject.toml file in /Users/lukas or its parentsLukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ IX Y7 EXT (-zsh)Last login: Mon Apr 20 19:48:04 on ttys005Poetry could not find a pyproject.toml file in /Users/lukas or its parentsEXTENSIONPoetry could not find a pyproject.toml file in /Users/lukas or its parentsukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $...
|
66688
|
|
39185
|
797
|
68
|
2026-04-16T13:32:38.748777+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776346358748_m2.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
ClaudeEditViewWindowHelp• Not Secure | [URL_WITH_C ClaudeEditViewWindowHelp• Not Secure | [URL_WITH_CREDENTIALS] ~ $ sqlite3~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_textWHERE app_name LIKE "%Safari%' OR window_name LIKE '%Boosteroid%'ORDER BY timestamp DESC LIMIT 20;"Error: in prepare, no such column: timestampari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESCLIMIT 20;error here ---^cBook-Pro-liminny ~ S salite?Show moreHi LukásWhere should westart?Create image* Create musicBoost my dayHelp me learnWrite anythingCreate a videoBulgarian citizenship application processDawarich location tracking projectBoosteroid still recording despite ignoredMissing JavaScriot promise in authorizatUux sol euor NAsClaude API 500 internal server errorScreenpipe query capabilities and usageeoru comoatoly wiun mac miniano oiUnderstanaing Openkouter Arl galewayScreenpipe 14-day retention explainedReddit homepage feed overviewDocker container not visible in consoleDIA browser RAM configurationScreenpipe company backgroundDSK Bank Bulgaria secure investing explaBuilding a comprehensive personal homeImporting Google Timeline data to Owntr:Cnromacact remora volume nulttans notiScreenpipe free version guideSelf-hosted LLM alternatives to Claude SoScreenpipe database query setupRunning screenpipe for freeRun the second query (no ORDER BY):sqlite3 ~/.screenpipe/db.sqlite "SELECT DISTINCT app_name, window_name FROM ocr_text WSharper images, better text.Meet Nano Banana 2.Ask Gemini+Summarize pagePre vReply..Sonnet 46 v^ Lukas Kovalkclaude is Al and can make mistakes. rlease double-cneck responses....
|
NULL
|
8820078202539206637
|
NULL
|
click
|
ocr
|
NULL
|
ClaudeEditViewWindowHelp• Not Secure | [URL_WITH_C ClaudeEditViewWindowHelp• Not Secure | [URL_WITH_CREDENTIALS] ~ $ sqlite3~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_textWHERE app_name LIKE "%Safari%' OR window_name LIKE '%Boosteroid%'ORDER BY timestamp DESC LIMIT 20;"Error: in prepare, no such column: timestampari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESCLIMIT 20;error here ---^cBook-Pro-liminny ~ S salite?Show moreHi LukásWhere should westart?Create image* Create musicBoost my dayHelp me learnWrite anythingCreate a videoBulgarian citizenship application processDawarich location tracking projectBoosteroid still recording despite ignoredMissing JavaScriot promise in authorizatUux sol euor NAsClaude API 500 internal server errorScreenpipe query capabilities and usageeoru comoatoly wiun mac miniano oiUnderstanaing Openkouter Arl galewayScreenpipe 14-day retention explainedReddit homepage feed overviewDocker container not visible in consoleDIA browser RAM configurationScreenpipe company backgroundDSK Bank Bulgaria secure investing explaBuilding a comprehensive personal homeImporting Google Timeline data to Owntr:Cnromacact remora volume nulttans notiScreenpipe free version guideSelf-hosted LLM alternatives to Claude SoScreenpipe database query setupRunning screenpipe for freeRun the second query (no ORDER BY):sqlite3 ~/.screenpipe/db.sqlite "SELECT DISTINCT app_name, window_name FROM ocr_text WSharper images, better text.Meet Nano Banana 2.Ask Gemini+Summarize pagePre vReply..Sonnet 46 v^ Lukas Kovalkclaude is Al and can make mistakes. rlease double-cneck responses....
|
39183
|
|
8232
|
160
|
18
|
2026-04-14T06:40:58.481053+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776148858481_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DiaFileEditViewTabsBookmarksHistoryWindowlolol| Da DiaFileEditViewTabsBookmarksHistoryWindowlolol| Daily - Platform • in 5 m100%Tue 14 Apr 9:40:58April 2026 Week 16EESTMon 13Tue 14Chloe Cross (Parental Leave - 256 days)Ivelina Hristova (Parental Leave - 184 days)Andrea Zlatanova (Parental Leave - 189 days)Lauren Hudson (PTO - 2 days)Easter MondayNikolay Nikolov (PT….Galya Dimitrova (PTO - 2 days)14:0015:00Preparatior! Support:1) Support Daily 15:00.forRefinement15:00- 16:0016:0017:00Retro - Platform17:00- 18:1518:0019:0020:0021:002026-04-14T09:34:27.123519Z2026-04-14T09:34:28.092531Z2026-04-14709:38:54.029363Z2026-04-14T09:39:28.082314Z2026-04-14T09:39:29.343941Z2026-04-14T09:39:30.750250ZExtensionsHelpWed 15Thu 16EventDaily - Platform09:4510:05 20 minTue Apr 14Edit original eventGMT+3 SofiaEvery 2 weeks on M..9 participants3 yes, 6 in a groupNikolay YankovOrganizer.*•Stefka Stoyanova88Platform Team (9)Lukás KoválikYesNoMaybeAdd participant or roomJoin Google Meet•L881Week vToday-zsh₴7* Unable to acce...O x8Fri 17Sat 18Sun 192026-04-1406:23:19.058103 UTC)1 Support Daily 15:00l6-04-1306:23:19.058103 UTCor_1)Tech Day ReviewL17:00-17:30..or_2)deleteds deletedretention)Joining Google Meet meeting..."Daily - Platform"Code mie-gawarasiretention)INFO screenpipe_engine::snapshot_compaction: snapshot compaction:4 frames,0. 9MB + 0.6MB (1.6х),4 JPEGSdeletedINFO screenpipe_engine::snapshot_compaction: snapshot compaction: 7 frames,1.4MB → 0.8MB (1.8x),7 JPEGS deletedINFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:38:54.029346+00:00 (14d retention)INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 40 eligible framesINFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 4.OMB → 0.7MB (6.0x),18 JPEGs deletedINFO screenpipe_engine::snapshot_compaction: snapshot compaction: 20 frames, 3.6MB → 0.8MB (4.5x), 20 JPEGs deleted...
|
NULL
|
8820040877868557407
|
NULL
|
click
|
ocr
|
NULL
|
DiaFileEditViewTabsBookmarksHistoryWindowlolol| Da DiaFileEditViewTabsBookmarksHistoryWindowlolol| Daily - Platform • in 5 m100%Tue 14 Apr 9:40:58April 2026 Week 16EESTMon 13Tue 14Chloe Cross (Parental Leave - 256 days)Ivelina Hristova (Parental Leave - 184 days)Andrea Zlatanova (Parental Leave - 189 days)Lauren Hudson (PTO - 2 days)Easter MondayNikolay Nikolov (PT….Galya Dimitrova (PTO - 2 days)14:0015:00Preparatior! Support:1) Support Daily 15:00.forRefinement15:00- 16:0016:0017:00Retro - Platform17:00- 18:1518:0019:0020:0021:002026-04-14T09:34:27.123519Z2026-04-14T09:34:28.092531Z2026-04-14709:38:54.029363Z2026-04-14T09:39:28.082314Z2026-04-14T09:39:29.343941Z2026-04-14T09:39:30.750250ZExtensionsHelpWed 15Thu 16EventDaily - Platform09:4510:05 20 minTue Apr 14Edit original eventGMT+3 SofiaEvery 2 weeks on M..9 participants3 yes, 6 in a groupNikolay YankovOrganizer.*•Stefka Stoyanova88Platform Team (9)Lukás KoválikYesNoMaybeAdd participant or roomJoin Google Meet•L881Week vToday-zsh₴7* Unable to acce...O x8Fri 17Sat 18Sun 192026-04-1406:23:19.058103 UTC)1 Support Daily 15:00l6-04-1306:23:19.058103 UTCor_1)Tech Day ReviewL17:00-17:30..or_2)deleteds deletedretention)Joining Google Meet meeting..."Daily - Platform"Code mie-gawarasiretention)INFO screenpipe_engine::snapshot_compaction: snapshot compaction:4 frames,0. 9MB + 0.6MB (1.6х),4 JPEGSdeletedINFO screenpipe_engine::snapshot_compaction: snapshot compaction: 7 frames,1.4MB → 0.8MB (1.8x),7 JPEGS deletedINFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-31T06:38:54.029346+00:00 (14d retention)INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 40 eligible framesINFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 4.OMB → 0.7MB (6.0x),18 JPEGs deletedINFO screenpipe_engine::snapshot_compaction: snapshot compaction: 20 frames, 3.6MB → 0.8MB (4.5x), 20 JPEGs deleted...
|
8231
|
|
25690
|
550
|
37
|
2026-04-15T12:59:32.661990+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776257972661_m2.jpg...
|
Boosteroid
|
Boosteroid
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
78252868524747/75Castle AgePlayer 4 Louis VI!!!--- 78252868524747/75Castle AgePlayer 4 Louis VI!!!---Castle Built----University Built-Game Paused (P)Stone Mine2405 Magnus Olafsson: 2825/28252 Rajyapala: 2787/27877 Maximilian of Habsburg: 2737/27374 Louis VI: 2674/26748 Almish Yiltawar: 2608/26086 László I: 2588/25883 Huascár: 2545/25451 kovaliklukas: 2437/2437...
|
NULL
|
8819071648724100856
|
NULL
|
click
|
ocr
|
NULL
|
78252868524747/75Castle AgePlayer 4 Louis VI!!!--- 78252868524747/75Castle AgePlayer 4 Louis VI!!!---Castle Built----University Built-Game Paused (P)Stone Mine2405 Magnus Olafsson: 2825/28252 Rajyapala: 2787/27877 Maximilian of Habsburg: 2737/27374 Louis VI: 2674/26748 Almish Yiltawar: 2608/26086 László I: 2588/25883 Huascár: 2545/25451 kovaliklukas: 2437/2437...
|
25688
|
|
57480
|
1236
|
16
|
2026-04-20T11:55:39.792991+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776686139792_m1.jpg...
|
Firefox
|
Firefox
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹ $0 lil100% C47 8 Mon 20 Apr 14:55:39DEV (docker)APP (-zsh)T₴1|DOCKERDEV (docker)jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-conferences:worker-conferences_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-crm-sync:worker-crm-sync_00: stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1: jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00:startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00: startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny# php artisan activity:update-esYou are about to work on activities:willinclude soft-deleted activitiesAre you sure? (yes/no) [no]:• yesAbout to work on 63813 activities with chunk size 50! Are you sure? (yes/no) [no]:> noX3-zsh*4screenpipe"• 85DEV...
|
NULL
|
8818750951790139149
|
NULL
|
idle
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹ $0 lil100% C47 8 Mon 20 Apr 14:55:39DEV (docker)APP (-zsh)T₴1|DOCKERDEV (docker)jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-conferences:worker-conferences_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-crm-sync:worker-crm-sync_00: stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1: jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00:startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00: startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny# php artisan activity:update-esYou are about to work on activities:willinclude soft-deleted activitiesAre you sure? (yes/no) [no]:• yesAbout to work on 63813 activities with chunk size 50! Are you sure? (yes/no) [no]:> noX3-zsh*4screenpipe"• 85DEV...
|
NULL
|
|
14016
|
311
|
4
|
2026-04-14T13:09:23.771430+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776172163771_m2.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhoStormViewNavigateCodelaraveRefactonWindowFVravs PhoStormViewNavigateCodelaraveRefactonWindowFVravsco.isv#11894 on JY-18909-automated-reports-ask-iminnyProject vc) ReportController.onpC SendReportJob.php(©) AutomatedReportsCommand.phpC AutomatedReportsSendCommand.phpC) Stage.php= env.rootAddLayoutchuitles.onoC Team.phpC AutomatedReportsRepository.phpC AutomatedReportsService.phpC CreateHeldActivityEvent.php=.env.stagingE aitattributes.gitignoreE.php-cs-fixer.cache© TrackProviderInstalledEvent.php© CreateActivityLoggedEvent.phpc) User?ilorActiviv.lstener.ono© ActivityLogged.php©) AutomatedReportsCallbackService.php(C) RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.phpC) AutomatedReportResult.phpAutomatedreport.ongpip cono"es"lixer.aisl.ongpip.onostom.mela.ono=.phpunit.result.cache=.prettierignore=.windsurfrulesphp_ide_helper.phpphp_Ide_nelper_models.phpphp artisan# composer.ison# composer.lock# dependency-checker.isonU dev.ison=ids.txt=infection.ison.distM+INSTALL.mdM+INTERNAL_WEBHOOK_SETUP.mciminny_storageM+licenses.mdM Makefileir nackage-ock.isonE phostan.neon.distconostan-oaselne.neot<> phpunit.xmlle raw sal query.salM+ README.mdos sonar-project.properties= test.py‹> Untitled Diagram.xmlis vetur.config.jsM.WEbHOOK FILIERING IMPLEME>n -xternal Liorariesv = Scratches and Consolesv M Database Consolesv & iminny@localhost& console fiminny@localhost Di fiminny@localhost]c HS_local liminny@localhosd SF liminny@localhost)d zoho_dev Jiminny@localhaV &PROD& console PrObIclass AutomatedReportsSendCommand extends Commandconsoe lPrODICDIIPKODI> 40ALQAL QAI PRODV L STAGINGd console STAGING9911001011021031041 eiSTM106d console_1 STAGINGd uranus STAGING_ExtensionsMScratchespublic function handleo: inttoreach (фreportkesults as sreportkesulo)** ovar Aucomaredkeporckesult greportkesult *+VaLidkeciplents = schis-›aucomatedkeportsservice-›getvalzdkeciplencusers(sreporckesult-›gecкeport())?if ($this->automatedReportsService->shouldSendReport(SvalidRecipients, $reportResult->getGeneratedAtO)) inunse> oocer-onro seut.ue racrtk.Dispatching job', I'uuid' = SreportResult->getUuid(),1):sth1s->dispatcher->d1spatch(new SendReportJob(sreportresult->getuuido.)*recurn commandAclas:.success;Tusageprivate function handleForceSendint Sresultid: int$reportResult = AutomatedReportResult::findSresultid):1f (sreportResult === nulb) ?$this->logger->error(self::L0G_PREFIX . ' Result not found', ['result_id' => $resultId]);return conmondA doSFAWLURE"$validRecipients = Sthis->automatedReportsService->aetValidRecipientUsers(SreportResult->getReportO):if (empty($validRecipients))sthis->loqger->error(self::L06_PREFIX."No valid recipients found'.'result_id' => $resultid.'uuld= SreportResult->getuuido1):return commanaAczas::FALLURE,$this->logger->info(self::LOG_PREFIX . ' Force dispatching job', ["resuur o => nresuccloh'uuid'= SreportResult->getUuid,I);sthis->d1spatcher->d1spatch(new SendReportJob(sreportResult->getuu1d0):return commandallas: • SuccEssRetro - Pattorm • in 51mTue 14 Aor 16:09:23= custom.lo9= laravel.logL SF (iminny@localhostc HS_local fiminny@localhost¿ console EUL console [STAGING X5235245255265275285575345355365395461541|542543544545546547548549550551553556557558559560561562563564Tx: Auto vPlayground vSo jiminny vWHERE U.team_id = 1 and sa.provider = 'salesforce';18 16 V.13select * from teams where id = 1:select * from groups g JOIN playbooks p 1..n<->1: on g.playbook id = p.id where q.team id = 1:select * from groups where 1d = 565:select * from playbooks where team_1d = 1ªselect * from playbooks where 1d = 1751select * trom playdook_cacegories where playdook_1d = 175;select * trom users where team_1d = 1,select * trom users where 1d = 7160;select * troicrm_profiles where user_id = 7160;select x trol teatures.selec"# id, uuid, type, provider, playbook category id, user id.lead_id, contact id, account id, opportunity id, stage id.# crm_configuration_id, crm_provider_id, transcription_id, statusfrom activities where crm_configuration_1d = 1 and type =confarenca'# and crm_provider_1d IS NOT NULLand provider !='uploader" and actual_start_time IS NOT NULLURDER Dy 10 desc;se ect * tron acuvtes where 1o 54405 4004000000070лAнselect p.ld, p.accvicy-type, pe.1a, pc.nameFROM playbooks Pjoin playbook_categories pc 1<->l.n: on p.id = pc.playbook_idwhere p.team id = 1 and p.activity type = 'event':SELECT * FROM crm_f1elds WHERE crm_configuration_1d = 1 and object_type = 'event':SELECT * FROM crm_field_values WHERE crm_field_id = 4;select * trom crn_layouts cl Join playdook_layouts pl >lan. on cl.1d = pl. layout_10where crm_configuration_id = 1 and pl.playbook_id = 175;select x trol teallls.SELECT r.* FROM automated_reports rjoin teams t on r.team id = t.idWHERE r.frequency = 'daily'and r.status = 1AND t.status = 'active'AND (r.expires at >= nowo OR r.expires at 1s NULL)*select * from automated_report_results where report 1d IN (18, 33);565select * trom aculvity_searcnes where 10 = 107521566select * from activity_search_filters where activity_search_id = 10932;select * fromaucomaced_reports order by da desc,568 /select * from automated_report_results order by id desc569select * from automated_report_results where ceport.id IN (37);570571SELECT * FROM automated_reports WHERE uuid_to_bin('18a06a75-afd2-476f-aadc-14d4057bdda2') = wuid;572573574...
|
NULL
|
8818458612422783670
|
NULL
|
click
|
ocr
|
NULL
|
PhoStormViewNavigateCodelaraveRefactonWindowFVravs PhoStormViewNavigateCodelaraveRefactonWindowFVravsco.isv#11894 on JY-18909-automated-reports-ask-iminnyProject vc) ReportController.onpC SendReportJob.php(©) AutomatedReportsCommand.phpC AutomatedReportsSendCommand.phpC) Stage.php= env.rootAddLayoutchuitles.onoC Team.phpC AutomatedReportsRepository.phpC AutomatedReportsService.phpC CreateHeldActivityEvent.php=.env.stagingE aitattributes.gitignoreE.php-cs-fixer.cache© TrackProviderInstalledEvent.php© CreateActivityLoggedEvent.phpc) User?ilorActiviv.lstener.ono© ActivityLogged.php©) AutomatedReportsCallbackService.php(C) RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.phpC) AutomatedReportResult.phpAutomatedreport.ongpip cono"es"lixer.aisl.ongpip.onostom.mela.ono=.phpunit.result.cache=.prettierignore=.windsurfrulesphp_ide_helper.phpphp_Ide_nelper_models.phpphp artisan# composer.ison# composer.lock# dependency-checker.isonU dev.ison=ids.txt=infection.ison.distM+INSTALL.mdM+INTERNAL_WEBHOOK_SETUP.mciminny_storageM+licenses.mdM Makefileir nackage-ock.isonE phostan.neon.distconostan-oaselne.neot<> phpunit.xmlle raw sal query.salM+ README.mdos sonar-project.properties= test.py‹> Untitled Diagram.xmlis vetur.config.jsM.WEbHOOK FILIERING IMPLEME>n -xternal Liorariesv = Scratches and Consolesv M Database Consolesv & iminny@localhost& console fiminny@localhost Di fiminny@localhost]c HS_local liminny@localhosd SF liminny@localhost)d zoho_dev Jiminny@localhaV &PROD& console PrObIclass AutomatedReportsSendCommand extends Commandconsoe lPrODICDIIPKODI> 40ALQAL QAI PRODV L STAGINGd console STAGING9911001011021031041 eiSTM106d console_1 STAGINGd uranus STAGING_ExtensionsMScratchespublic function handleo: inttoreach (фreportkesults as sreportkesulo)** ovar Aucomaredkeporckesult greportkesult *+VaLidkeciplents = schis-›aucomatedkeportsservice-›getvalzdkeciplencusers(sreporckesult-›gecкeport())?if ($this->automatedReportsService->shouldSendReport(SvalidRecipients, $reportResult->getGeneratedAtO)) inunse> oocer-onro seut.ue racrtk.Dispatching job', I'uuid' = SreportResult->getUuid(),1):sth1s->dispatcher->d1spatch(new SendReportJob(sreportresult->getuuido.)*recurn commandAclas:.success;Tusageprivate function handleForceSendint Sresultid: int$reportResult = AutomatedReportResult::findSresultid):1f (sreportResult === nulb) ?$this->logger->error(self::L0G_PREFIX . ' Result not found', ['result_id' => $resultId]);return conmondA doSFAWLURE"$validRecipients = Sthis->automatedReportsService->aetValidRecipientUsers(SreportResult->getReportO):if (empty($validRecipients))sthis->loqger->error(self::L06_PREFIX."No valid recipients found'.'result_id' => $resultid.'uuld= SreportResult->getuuido1):return commanaAczas::FALLURE,$this->logger->info(self::LOG_PREFIX . ' Force dispatching job', ["resuur o => nresuccloh'uuid'= SreportResult->getUuid,I);sthis->d1spatcher->d1spatch(new SendReportJob(sreportResult->getuu1d0):return commandallas: • SuccEssRetro - Pattorm • in 51mTue 14 Aor 16:09:23= custom.lo9= laravel.logL SF (iminny@localhostc HS_local fiminny@localhost¿ console EUL console [STAGING X5235245255265275285575345355365395461541|542543544545546547548549550551553556557558559560561562563564Tx: Auto vPlayground vSo jiminny vWHERE U.team_id = 1 and sa.provider = 'salesforce';18 16 V.13select * from teams where id = 1:select * from groups g JOIN playbooks p 1..n<->1: on g.playbook id = p.id where q.team id = 1:select * from groups where 1d = 565:select * from playbooks where team_1d = 1ªselect * from playbooks where 1d = 1751select * trom playdook_cacegories where playdook_1d = 175;select * trom users where team_1d = 1,select * trom users where 1d = 7160;select * troicrm_profiles where user_id = 7160;select x trol teatures.selec"# id, uuid, type, provider, playbook category id, user id.lead_id, contact id, account id, opportunity id, stage id.# crm_configuration_id, crm_provider_id, transcription_id, statusfrom activities where crm_configuration_1d = 1 and type =confarenca'# and crm_provider_1d IS NOT NULLand provider !='uploader" and actual_start_time IS NOT NULLURDER Dy 10 desc;se ect * tron acuvtes where 1o 54405 4004000000070лAнselect p.ld, p.accvicy-type, pe.1a, pc.nameFROM playbooks Pjoin playbook_categories pc 1<->l.n: on p.id = pc.playbook_idwhere p.team id = 1 and p.activity type = 'event':SELECT * FROM crm_f1elds WHERE crm_configuration_1d = 1 and object_type = 'event':SELECT * FROM crm_field_values WHERE crm_field_id = 4;select * trom crn_layouts cl Join playdook_layouts pl >lan. on cl.1d = pl. layout_10where crm_configuration_id = 1 and pl.playbook_id = 175;select x trol teallls.SELECT r.* FROM automated_reports rjoin teams t on r.team id = t.idWHERE r.frequency = 'daily'and r.status = 1AND t.status = 'active'AND (r.expires at >= nowo OR r.expires at 1s NULL)*select * from automated_report_results where report 1d IN (18, 33);565select * trom aculvity_searcnes where 10 = 107521566select * from activity_search_filters where activity_search_id = 10932;select * fromaucomaced_reports order by da desc,568 /select * from automated_report_results order by id desc569select * from automated_report_results where ceport.id IN (37);570571SELECT * FROM automated_reports WHERE uuid_to_bin('18a06a75-afd2-476f-aadc-14d4057bdda2') = wuid;572573574...
|
NULL
|