|
31404
|
634
|
14
|
2026-04-15T15:41:27.534260+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776267687534_m2.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
EditViewWindowHelp• Not Secure | [URL_WITH_CREDENT EditViewWindowHelp• Not Secure | [URL_WITH_CREDENTIALS] ~/.screenpipe/data/data/2026-04-15 $ du -sh~/.screenpipe/data/data/*39M /Users/lukas/.screenpipe/data/data/2026-04-0950M /Users/lukas/.screenpipe/data/data/2026-04-11Show moreThis is very revealing. Let me analyze what you've shown me carefully.The MP4 files on Apr 15 are massive - you have (compact_monitor_2) files of 30-46 MBeach from ~13:00 onwards, and they come in pairs (a big one + a small one at the sametimestamp). Monitor 1 stays small (~1-5 MB). This is not screen recording — this is videoplayback on monitor 2. You were watching something (video, demo, screen share) from13:00-18:12, which bloated the MP4s because video contentDBP0*yes but why is ther only+Sonnet 46 vClaude is Al and can make mistakes. Please double-check responses....
|
NULL
|
8807559131821817152
|
NULL
|
click
|
ocr
|
NULL
|
EditViewWindowHelp• Not Secure | [URL_WITH_CREDENT EditViewWindowHelp• Not Secure | [URL_WITH_CREDENTIALS] ~/.screenpipe/data/data/2026-04-15 $ du -sh~/.screenpipe/data/data/*39M /Users/lukas/.screenpipe/data/data/2026-04-0950M /Users/lukas/.screenpipe/data/data/2026-04-11Show moreThis is very revealing. Let me analyze what you've shown me carefully.The MP4 files on Apr 15 are massive - you have (compact_monitor_2) files of 30-46 MBeach from ~13:00 onwards, and they come in pairs (a big one + a small one at the sametimestamp). Monitor 1 stays small (~1-5 MB). This is not screen recording — this is videoplayback on monitor 2. You were watching something (video, demo, screen share) from13:00-18:12, which bloated the MP4s because video contentDBP0*yes but why is ther only+Sonnet 46 vClaude is Al and can make mistakes. Please double-check responses....
|
NULL
|
|
48313
|
1025
|
24
|
2026-04-17T12:36:20.276699+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776429380276_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Term2ShellEditViewSessionScriptsProfilesWindowHelp Term2ShellEditViewSessionScriptsProfilesWindowHelpladl• Tech Day Review - in 1h 24 mAAPP (-zsh)X4-zshDOCKER881DEV (docker)APP (-zsh)X3-zsh• ₴5* Review screenp...• ₴6Changes notstagedfor commit:(use"git add ‹file›….to update what will becommitted)(use"git restore<file>..."to discard changesin working directory)modified:.env.localmodified:./app/Console/Commands/JiminnyDebugCommand.phpmodified:../app/Http/Controllers/API/ActivityController.phpmodified:../app/Http/Controllers/Webhook/ReportController.phpmodified::./app/Jobs/Team/SyncToIntercom.phpmodified:/app/Services/PlaybackService.phpmodified::/config/logging.phpmodified:../routes/web.phpUntracked files:Cuse"git add <files..."to include in what will be committed)/.env.nikilocal/.env.other../WEBHOOK_FILTERING_IMPLEMENTATION.md../app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php../app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php./ids.txt../raw_sql_query.sql../tests/Unit/Policies/CanAccessAiReportsTest.phpno changes addedto commit (use "git add"and/or "git commit -a")lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app/front-end (JY-18909-automated-reports-ask-jiminny) $ git pullremote: Enumerating objects: 170,done.remote: Counting objects: 100% (147/147), done.remote: Compressing objects: 100% (35/35), done.remote:Total 170 (delta 116), reused 121 (delta 111), pack-reused 23 (from 1)Receiving objects: 100% (170/170), 55.28 KiB | 1.42 MiB/s,done.Resolving deltas: 100% (119/119), completed with 47 local objects.From github.com:jiminny/app82671d4c13..d4352c6e59JY-20291-datadog-processing-states-> origin/JY-20291-datadog-processing-states20e95bbbc9..360f12adddJY-20541-cleanup-stale-tasks-and-events-> origin/JY-20541-cleanup-stale-tasks-and-events+ 9f8d154791...01c43d2aa6 JY-20553-debug-crm-sync-delays-> origin/JY-20553-debug-crm-sync-delays (forced update)* [new branch]JY-20695-handle-no-raw-transcript-› origin/JY-20695-handle-no-raw-transcriptbe76d8ba82..9b30c928c4JY-9712-change-forever-nudges-to-1-year-expiration -> origin/JY-9712-change-forever-nudges-to-1-year-expiration5bb8fefcba..c04e334173master-> origin/masterUpdating aba9685c0d..08ed383c5berror: Your local changes to the following files would be overwritten by merge:app/Http/Controllers/Webhook/ReportController.phpPlease commit your changes or stash them before you merge.Abortingukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app/front-end (JY-18909-automated-reports-ask-jiminny) $ Uec2-user@ip-10-...• ₴7100% <478Fri 17 Apr 15:36:201₴81ec2-user@ip-10-...O ₴8APP...
|
NULL
|
8807173660939367912
|
NULL
|
click
|
ocr
|
NULL
|
Term2ShellEditViewSessionScriptsProfilesWindowHelp Term2ShellEditViewSessionScriptsProfilesWindowHelpladl• Tech Day Review - in 1h 24 mAAPP (-zsh)X4-zshDOCKER881DEV (docker)APP (-zsh)X3-zsh• ₴5* Review screenp...• ₴6Changes notstagedfor commit:(use"git add ‹file›….to update what will becommitted)(use"git restore<file>..."to discard changesin working directory)modified:.env.localmodified:./app/Console/Commands/JiminnyDebugCommand.phpmodified:../app/Http/Controllers/API/ActivityController.phpmodified:../app/Http/Controllers/Webhook/ReportController.phpmodified::./app/Jobs/Team/SyncToIntercom.phpmodified:/app/Services/PlaybackService.phpmodified::/config/logging.phpmodified:../routes/web.phpUntracked files:Cuse"git add <files..."to include in what will be committed)/.env.nikilocal/.env.other../WEBHOOK_FILTERING_IMPLEMENTATION.md../app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php../app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php./ids.txt../raw_sql_query.sql../tests/Unit/Policies/CanAccessAiReportsTest.phpno changes addedto commit (use "git add"and/or "git commit -a")lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app/front-end (JY-18909-automated-reports-ask-jiminny) $ git pullremote: Enumerating objects: 170,done.remote: Counting objects: 100% (147/147), done.remote: Compressing objects: 100% (35/35), done.remote:Total 170 (delta 116), reused 121 (delta 111), pack-reused 23 (from 1)Receiving objects: 100% (170/170), 55.28 KiB | 1.42 MiB/s,done.Resolving deltas: 100% (119/119), completed with 47 local objects.From github.com:jiminny/app82671d4c13..d4352c6e59JY-20291-datadog-processing-states-> origin/JY-20291-datadog-processing-states20e95bbbc9..360f12adddJY-20541-cleanup-stale-tasks-and-events-> origin/JY-20541-cleanup-stale-tasks-and-events+ 9f8d154791...01c43d2aa6 JY-20553-debug-crm-sync-delays-> origin/JY-20553-debug-crm-sync-delays (forced update)* [new branch]JY-20695-handle-no-raw-transcript-› origin/JY-20695-handle-no-raw-transcriptbe76d8ba82..9b30c928c4JY-9712-change-forever-nudges-to-1-year-expiration -> origin/JY-9712-change-forever-nudges-to-1-year-expiration5bb8fefcba..c04e334173master-> origin/masterUpdating aba9685c0d..08ed383c5berror: Your local changes to the following files would be overwritten by merge:app/Http/Controllers/Webhook/ReportController.phpPlease commit your changes or stash them before you merge.Abortingukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app/front-end (JY-18909-automated-reports-ask-jiminny) $ Uec2-user@ip-10-...• ₴7100% <478Fri 17 Apr 15:36:201₴81ec2-user@ip-10-...O ₴8APP...
|
NULL
|
|
35840
|
729
|
56
|
2026-04-16T10:10:36.175113+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776334236175_m2.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
SackFileFoitViewHistoryWindowHelpSearch Jiminny In SackFileFoitViewHistoryWindowHelpSearch Jiminny IncJiminny ...& jiminny-x-integration-app= UnreadsMessagestP Add canvas4r Files* Pins= Bookmarkse) ThreadsDMsDepending on the customer we pass different set of data as input6d HuddlesZnes Downloae alli• Drafts & sent8 DirectoriesAchivityEh External connectionsFiles* Starred@ iminny-x-integrati..platform-inner-team# Channelsi# ai-chaptenMore# alerts# backend# contusion-clinic# curiosity lab# engineering# frontend#: general# infra-changes#: liminny-bg# platform-tickets#: product launchesac random# releases# sofa-ofhce# supportac thank-vous# the people of iimi..0 Direct messagesVasil Vasilev% Galya DimitrovaNikolay Ivanov- Aneliva Angeloval3 Aneliva Angelova. ..Stoyan Tanev CVesStelivan Georgiev3 Adelina Petrova, Ili...Adelina Petrova**:AppsToastJira Cloud* 18the first one has Due Date but the second one has not (editedLukas Kovallik 3:15 PMIs it some setting?Đ:02039 replies View threadFebruary 13th. 2025 vlLukas Kovalk 4-55 PMVe nave round one more prodiem with one or the requests. [URL_WITH_CREDENTIALS] @Gui @Ryan Thank youV1February 14th, 2025 vVacll vacilev 1.21.0MGuys, can someone please explain to me what do all those events do:[URL_WITH_CREDENTIALS] connect.vue XV Onboard.vuec HS_local fiminny@localhostRODII4 console [STAGING)ionAppOnClicko {s.crul oken.tion = await integrationAppon(this.localProvider.name)nnectiongredBy: false,t1pleconnections: false,' LintegrationApp opennewconnection resouved:, Json.scringlry connectlon)):ionAppl openNewConnection resolved: {9e0b41a67d0068c2ca0b48e",me":"Zoho CRM",erld":"lece66c8-feb1-4df1-b321-21607daf4623",nantid":"69e0b3faef3e7b6248189289",Test":false.nnected":true,ate": "READY",rors": [],cernaLAppld": "06/1655e/ezdo4zе4e41b0ta",chuptlonkey".""eatedAt":"2026-04-16T10:04:10.420Z",datedAt":"2026-04-16T10:04:10.575Z" ,tryAttempts":0.Deactivated":falseon xx connection.connected === true) 1ction && connection.disconnected === false) {Vereduest = await axlos.dosttV1ЛVSupport Daily • in 1h 50 mA]100% zThu 16 Apr 13:10:35CascadeIntegration App ConneWhether it resolves as null / undefined if the user closes the modallWhat the value is when ©Auth completes successfullyIne key •uestionis wherner connection, dnsconnected === talse sacrualvthe right check - or if the SDK returns something like connection.connected== true (matching what you saw in the network response earlier).alaiselttalatelsleins55b7" "name"."ZohoDe0afd25ae490e8d05d8ca2" "isTest":false,"1OE201CCA2АЛARHlAVtArnalAnniaI.HCA716L16T09:57:59.175Z"."retryAttempts":0,"isDeactivated":false}The object uses connected: true - there is no disconnected field at all. Sothe current check connection.disconnected == false evaluates to undefined == false → false - meaning the POST to /api/v1/integration-app-connect S nevercallled atera successul connection.This is the oud. Fix It in both connect vue and onboard, vues• connect.vu+1-3Now fix the same bug in Onboard.vue:Read Onboard vue #L503-517Onboard.vue+1 -1Both tiles fixed. Summary of the bug:Tihe Sok rerurns connecter: true —there is no disconnected fieldlconnection.disconnected === false was undefined === false →alwavs talse → resnevertred• Same in Onboard.vue: connection.disconnected === true was undefined === true → always talse → always snowed the error snackoarNow after openNewConnection() resolveswith connected: true,the POST /api/v1/integration-app-connect will be called and the SocialAccount will beAsk anything (2+L)+ @ CodeClaude Sonnet 4.6WSmTRkt -ERT3N-1qXDRpYmKcbLPMd6v05DLy...LiTo ulonKcorMooLnUSuTNoyuoU4• provider_refresh_token TSHULLeeyJzdil6IjAwMDAwMSIsImFsZyI6IkhTNTEyIiwidiI6IjIuMCIsImtpZCI6IjVmNWFhZGFkLTQwZDktNDLkNy®4_ expires17763361761729613615W Windsurf Teamsuir-oCa 2 space:...
|
NULL
|
8806795899923108871
|
NULL
|
visual_change
|
ocr
|
NULL
|
SackFileFoitViewHistoryWindowHelpSearch Jiminny In SackFileFoitViewHistoryWindowHelpSearch Jiminny IncJiminny ...& jiminny-x-integration-app= UnreadsMessagestP Add canvas4r Files* Pins= Bookmarkse) ThreadsDMsDepending on the customer we pass different set of data as input6d HuddlesZnes Downloae alli• Drafts & sent8 DirectoriesAchivityEh External connectionsFiles* Starred@ iminny-x-integrati..platform-inner-team# Channelsi# ai-chaptenMore# alerts# backend# contusion-clinic# curiosity lab# engineering# frontend#: general# infra-changes#: liminny-bg# platform-tickets#: product launchesac random# releases# sofa-ofhce# supportac thank-vous# the people of iimi..0 Direct messagesVasil Vasilev% Galya DimitrovaNikolay Ivanov- Aneliva Angeloval3 Aneliva Angelova. ..Stoyan Tanev CVesStelivan Georgiev3 Adelina Petrova, Ili...Adelina Petrova**:AppsToastJira Cloud* 18the first one has Due Date but the second one has not (editedLukas Kovallik 3:15 PMIs it some setting?Đ:02039 replies View threadFebruary 13th. 2025 vlLukas Kovalk 4-55 PMVe nave round one more prodiem with one or the requests. [URL_WITH_CREDENTIALS] @Gui @Ryan Thank youV1February 14th, 2025 vVacll vacilev 1.21.0MGuys, can someone please explain to me what do all those events do:[URL_WITH_CREDENTIALS] connect.vue XV Onboard.vuec HS_local fiminny@localhostRODII4 console [STAGING)ionAppOnClicko {s.crul oken.tion = await integrationAppon(this.localProvider.name)nnectiongredBy: false,t1pleconnections: false,' LintegrationApp opennewconnection resouved:, Json.scringlry connectlon)):ionAppl openNewConnection resolved: {9e0b41a67d0068c2ca0b48e",me":"Zoho CRM",erld":"lece66c8-feb1-4df1-b321-21607daf4623",nantid":"69e0b3faef3e7b6248189289",Test":false.nnected":true,ate": "READY",rors": [],cernaLAppld": "06/1655e/ezdo4zе4e41b0ta",chuptlonkey".""eatedAt":"2026-04-16T10:04:10.420Z",datedAt":"2026-04-16T10:04:10.575Z" ,tryAttempts":0.Deactivated":falseon xx connection.connected === true) 1ction && connection.disconnected === false) {Vereduest = await axlos.dosttV1ЛVSupport Daily • in 1h 50 mA]100% zThu 16 Apr 13:10:35CascadeIntegration App ConneWhether it resolves as null / undefined if the user closes the modallWhat the value is when ©Auth completes successfullyIne key •uestionis wherner connection, dnsconnected === talse sacrualvthe right check - or if the SDK returns something like connection.connected== true (matching what you saw in the network response earlier).alaiselttalatelsleins55b7" "name"."ZohoDe0afd25ae490e8d05d8ca2" "isTest":false,"1OE201CCA2АЛARHlAVtArnalAnniaI.HCA716L16T09:57:59.175Z"."retryAttempts":0,"isDeactivated":false}The object uses connected: true - there is no disconnected field at all. Sothe current check connection.disconnected == false evaluates to undefined == false → false - meaning the POST to /api/v1/integration-app-connect S nevercallled atera successul connection.This is the oud. Fix It in both connect vue and onboard, vues• connect.vu+1-3Now fix the same bug in Onboard.vue:Read Onboard vue #L503-517Onboard.vue+1 -1Both tiles fixed. Summary of the bug:Tihe Sok rerurns connecter: true —there is no disconnected fieldlconnection.disconnected === false was undefined === false →alwavs talse → resnevertred• Same in Onboard.vue: connection.disconnected === true was undefined === true → always talse → always snowed the error snackoarNow after openNewConnection() resolveswith connected: true,the POST /api/v1/integration-app-connect will be called and the SocialAccount will beAsk anything (2+L)+ @ CodeClaude Sonnet 4.6WSmTRkt -ERT3N-1qXDRpYmKcbLPMd6v05DLy...LiTo ulonKcorMooLnUSuTNoyuoU4• provider_refresh_token TSHULLeeyJzdil6IjAwMDAwMSIsImFsZyI6IkhTNTEyIiwidiI6IjIuMCIsImtpZCI6IjVmNWFhZGFkLTQwZDktNDLkNy®4_ expires17763361761729613615W Windsurf Teamsuir-oCa 2 space:...
|
NULL
|
|
74988
|
1868
|
13
|
2026-04-23T10:27:38.682442+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-23/1776 /Users/lukas/.screenpipe/data/data/2026-04-23/1776940058682_m2.jpg...
|
Firefox
|
Jy 20541 extract common traits by Vasil-Jiminny · Jy 20541 extract common traits by Vasil-Jiminny · Pull Request #12008 · jiminny/app — Work...
|
True
|
github.com/jiminny/app/pull/12008/changes#diff-79d github.com/jiminny/app/pull/12008/changes#diff-79dc084299d57efa2491d7f2eae6b88fe02c19af3ff28601d13918799c987bef...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 2 Q2 - Platform Team - Scrum Board Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
New Tab
New Tab
AI reports promotion pages by nikolay-yankov · Pull Request #11998 · jiminny/app
AI reports promotion pages by nikolay-yankov · Pull Request #11998 · jiminny/app
JY-9712 | Nuges to expire after one year by nikolaybiaivanov · Pull Request #11981 · jiminny/app
JY-9712 | Nuges to expire after one year by nikolaybiaivanov · Pull Request #11981 · jiminny/app
Jiminny
Jiminny
Userpilot | Saved Reports
Userpilot | Saved Reports
Jiminny
Jiminny
Jy 20541 extract common traits by Vasil-Jiminny · Pull Request #12008 · jiminny/app
Jy 20541 extract common traits by Vasil-Jiminny · Pull Request #12008 · jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
Issues(g then i)
Pull requests
Repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (33)
Pull requests
(
33
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (32)
Security and quality
(
32
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
Jy 20541 extract common traits #12008 Edit title
Jy 20541 extract common traits
#
12008
Edit title
Preview
Preview
Checks pending
Checks pending
Code
Code
Open
Vasil-Jiminny
Vasil-Jiminny
wants to merge 37 commits into
master
master
from
JY-20541-extract-common-traits
JY-20541-extract-common-traits
Copy head branch name to clipboard
Lines changed: 1321 additions & 442 deletions
Conversation (5)
Conversation
(
5
)
Commits (37)
Commits
(
37
)
Checks (2)
Checks
(
2
)
Files changed (20)
Files changed
(
20
)
Pull Request Toolbar
Pull Request Toolbar
Collapse file tree
Open
Jy 20541 extract common traits
Jy 20541 extract common traits
#
12008
All commits
All commits
Vasil-Jiminny
Vasil-Jiminny
wants to merge 37 commits into
master
master
from
JY-20541-extract-common-traits
JY-20541-extract-common-traits
Copy head branch name to clipboard
16
/
20
viewed
Checks pending
Checks pending
Submit review
Submit
review
Open diff view settings
Open overview panel
Open comments panel
(
0
)
Filter files…
Filter options
File tree
File tree
app
Component/Activity/Services
GetDefaultActivityTypeService.php
GetDefaultActivityTypeService.php
Listeners/Crm
RemoteCrmRecordDeletedListener.php
RemoteCrmRecordDeletedListener.php
Models
Activity.php
Activity.php
PlaybookCategory.php
PlaybookCategory.php
Services/Crm
Close
Service.php
Service.php
Helpers
ActivityPlaybookTrait.php
ActivityPlaybookTrait.php
CrmHelperRepository.php
CrmHelperRepository.php
Listeners
ConvertLeadActivities.php
ConvertLeadActivities.php
Salesforce
Fields
FieldHelper.php
FieldHelper.php
ServiceTraits
FollowupActivityTrait.php
FollowupActivityTrait.php
Service.php
Service.php
BaseService.php
BaseService.php
tests/Unit
Component/Activity/Services
GetDefaultActivityTypeServiceTest.php
GetDefaultActivityTypeServiceTest.php
Services/Crm
Helpers
ActivityPlaybookTraitTest.php
ActivityPlaybookTraitTest.php
IntegrationApp
ServiceTest.php
ServiceTest.php
Listeners
ConvertLeadActivitiesTest.php
ConvertLeadActivitiesTest.php
Salesforce
Fields
ServiceTraits
Collapse file
app/Component/Activity/Services/GetDefaultActivityTypeService.php
app/Component/Activity/Services/GetDefaultActivityTypeService.php
app/Component/Activity/Services/GetDefaultActivityTypeService.php
Copy file name to clipboard
Expand all lines: app/Component/Activity/Services/GetDefaultActivityTypeService.php
Lines changed: 7 additions & 1 deletion
Not Viewed
Viewed
Comment on this file
More options
Original file line number
Original file line
Diff line number
Diff line change
@@ -72,7 +72,13 @@ public function getForUserAndChannel(User $user, string $channel): ?PlaybookCate
72
private
function
playbookMatchesActivityPlaybook
(
Activity
$
activity
):
bool
72
private
function
playbookMatchesActivityPlaybook
(
Activity
$
activity
):
bool
73
{
73
{
74
$
sidekickPlaybook
=
$
this
->
sidekickService
->
getSidekickPlaybook
(
$
activity
->
getUser
());
74
$
sidekickPlaybook
=
$
this
->
sidekickService
->
getSidekickPlaybook
(
$
activity
->
getUser
());
75
+
// Sidekick playbook may be null, and the activity playbook may be null as well.
76
+
// Both can be soft-deleted.
77
+
// For that reason, at least one of the two playbooks must be guaranteed not to be null.
78
+
if
(
$
sidekickPlaybook
===
null
) {
79
+
return
false
;
80
+
}
75
81
76
-
return
$
activity
->
getActivityType
()->
getPlaybook
()->
getId
() ===
$
sidekickPlaybook
?->getId();
82
+
return
$
activity
->
getActivityType
()
?
->getPlaybook()
?
->getId() ===
$
sidekickPlaybook
?->getId();
77
}
83
}
78
}
84
}
Original file line number
@@ -72,7 +72,13 @@ public function getForUserAndChannel(User $user, string $channel): ?PlaybookCate
72
73
74
75
76
77
78
Original file line
@@ -72,7 +72,13 @@ public function getForUserAndChannel(User $user, string $channel): ?PlaybookCate
private
function
playbookMatchesActivityPlaybook
(
Activity
$
activity
):
bool
{
$
sidekickPlaybook
=
$
this
->
sidekickService
->
getSidekickPlaybook
(
$
activity
->
getUser
());
-
return
$
activity
->
getActivityType
()->
getPlaybook
()->
getId
() ===
$
sidekickPlaybook
?->getId();
}
}
Diff line number
@@ -72,7 +72,13 @@ public function getForUserAndChannel(User $user, string $channel): ?PlaybookCate
72
73
74
75
76
77
78
79
80
81
82
83
84
Diff line change
@@ -72,7 +72,13 @@ public function getForUserAndChannel(User $user, string $channel): ?PlaybookCate
private
function
playbookMatchesActivityPlaybook
(
Activity
$
activity
):
bool
{
$
sidekickPlaybook
=
$
this
->
sidekickService
->
getSidekickPlaybook
(
$
activity
->
getUser
());
+
// Sidekick playbook may be null, and the activity playbook may be null as well.
+
// Both can be soft-deleted.
+
// For that reason, at least one of the two playbooks must be guaranteed not to be null.
+
if
(
$
sidekickPlaybook
===
null
) {
+
return
false
;
+
}
+
return
$
activity
->
getActivityType
()
?
->getPlaybook()
?
->getId() ===
$
sidekickPlaybook
?->getId();
}
}
Expand file
app/Listeners/Crm/RemoteCrmRecordDeletedListener.php
app/Listeners/Crm/RemoteCrmRecordDeletedListener.php
app/Listeners/Crm/RemoteCrmRecordDeletedListener.php
Copy file name to clipboard
Expand all lines: app/Listeners/Crm/RemoteCrmRecordDeletedListener.php
Lines changed: 0 additions & 1 deletion
Viewed
Viewed
Comment on this file
More options
Expand file
app/Models/Activity.php
app/Models/Activity.php
app/Models/Activity.php
Copy file name to clipboard
Expand all lines: app/Models/Activity.php
Lines changed: 21 additions & 1 deletion
Viewed
Viewed
Comment on this file
More options
Expand file
app/Models/PlaybookCategory.php
app/Models/PlaybookCategory.php
app/Models/PlaybookCategory.php
Copy file name to clipboard
Expand all lines: app/Models/PlaybookCategory.php
Lines changed: 1 addition & 1 deletion
Viewed
Viewed
Comment on this file
More options
Expand file
app/Services/Crm/Close/Service.php
app/Services/Crm/Close/Service.php...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.23321144,"top":0.0518755,"width":0.07596409,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.23138298,"top":0.09497207,"width":0.07962101,"height":0.032721467},"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.24468085,"top":0.10614525,"width":0.014960106,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"AI reports promotion pages by nikolay-yankov · Pull Request #11998 · jiminny/app","depth":4,"bounds":{"left":0.23138298,"top":0.12769353,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AI reports promotion pages by nikolay-yankov · Pull Request #11998 · jiminny/app","depth":5,"bounds":{"left":0.24468085,"top":0.13886672,"width":0.14128989,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-9712 | Nuges to expire after one year by nikolaybiaivanov · Pull Request #11981 · jiminny/app","depth":4,"bounds":{"left":0.23138298,"top":0.16041501,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-9712 | Nuges to expire after one year by nikolaybiaivanov · Pull Request #11981 · jiminny/app","depth":5,"bounds":{"left":0.24468085,"top":0.17158818,"width":0.16555852,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.23138298,"top":0.19313647,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.24468085,"top":0.20430966,"width":0.013131649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Userpilot | Saved Reports","depth":4,"bounds":{"left":0.23138298,"top":0.22585794,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Userpilot | Saved Reports","depth":5,"bounds":{"left":0.24468085,"top":0.23703113,"width":0.044049203,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.23138298,"top":0.2585794,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.24468085,"top":0.2697526,"width":0.013131649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20541 extract common traits by Vasil-Jiminny · Pull Request #12008 · jiminny/app","depth":4,"bounds":{"left":0.23138298,"top":0.29130086,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jy 20541 extract common traits by Vasil-Jiminny · Pull Request #12008 · jiminny/app","depth":5,"bounds":{"left":0.24468085,"top":0.30247405,"width":0.14660904,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.29870346,"top":0.29848364,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.23420878,"top":0.3256185,"width":0.07413564,"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.23420878,"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 Google Gemini (⌃X)","depth":6,"bounds":{"left":0.24517952,"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":"Tabs from other devices","depth":6,"bounds":{"left":0.25631648,"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.26745346,"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.2785904,"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":"AXLink","text":"Skip to content","depth":6,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":10,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":9,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":9,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Issues(g then i)","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Pull requests","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Repositories","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"You have unread notifications(g then n)","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open user navigation menu","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (33)","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"33","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Agents","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security and quality (32)","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security and quality","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"32","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Important update","depth":10,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Important update","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Review this update","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Review this update","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and manage your preferences in your","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GitHub account settings","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub account settings","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dismiss banner","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Jy 20541 extract common traits #12008 Edit title","depth":13,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jy 20541 extract common traits","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12008","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit title","depth":14,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Preview","depth":13,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preview","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Checks pending","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks pending","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Code","depth":13,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Vasil-Jiminny","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vasil-Jiminny","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 37 commits into","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":15,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20541-extract-common-traits","depth":16,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20541-extract-common-traits","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":16,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 1321 additions & 442 deletions","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Conversation (5)","depth":16,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Conversation","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Commits (37)","depth":16,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Commits","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Checks (2)","depth":16,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Files changed (20)","depth":16,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Files changed","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Pull Request Toolbar","depth":14,"bounds":{"left":0.32164228,"top":0.07581804,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pull Request Toolbar","depth":15,"bounds":{"left":0.32164228,"top":0.07861133,"width":0.030086435,"height":0.08060654},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse file tree","depth":14,"bounds":{"left":0.32164228,"top":0.0650439,"width":0.00930851,"height":0.022346368},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Open","depth":14,"bounds":{"left":0.34424868,"top":0.06943336,"width":0.011968086,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jy 20541 extract common traits","depth":14,"bounds":{"left":0.3628657,"top":0.058260176,"width":0.07164229,"height":0.016759777},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20541 extract common traits","depth":16,"bounds":{"left":0.3628657,"top":0.059856344,"width":0.07164229,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":15,"bounds":{"left":0.43716756,"top":0.059856344,"width":0.0028257978,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12008","depth":15,"bounds":{"left":0.43999335,"top":0.059856344,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"All commits","depth":14,"bounds":{"left":0.36020613,"top":0.07182761,"width":0.03374335,"height":0.022346368},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All commits","depth":16,"bounds":{"left":0.36319813,"top":0.07701516,"width":0.02244016,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Vasil-Jiminny","depth":15,"bounds":{"left":0.39827126,"top":0.07581804,"width":0.02642952,"height":0.014365523},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vasil-Jiminny","depth":16,"bounds":{"left":0.39827126,"top":0.07701516,"width":0.02642952,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 37 commits into","depth":15,"bounds":{"left":0.42603058,"top":0.07701516,"width":0.060339097,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":15,"bounds":{"left":0.48769948,"top":0.074221864,"width":0.018284574,"height":0.017557861},"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":16,"bounds":{"left":0.48969415,"top":0.07741421,"width":0.014295213,"height":0.011572227},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":16,"bounds":{"left":0.50731385,"top":0.07701516,"width":0.00880984,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20541-extract-common-traits","depth":16,"bounds":{"left":0.51745343,"top":0.074221864,"width":0.07596409,"height":0.017557861},"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20541-extract-common-traits","depth":17,"bounds":{"left":0.51944816,"top":0.07741421,"width":0.07197473,"height":0.011572227},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":16,"bounds":{"left":0.59474736,"top":0.07182761,"width":0.00930851,"height":0.022346368},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"16","depth":15,"bounds":{"left":0.82081115,"top":0.070231445,"width":0.004488032,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.8252992,"top":0.070231445,"width":0.0023271276,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20","depth":15,"bounds":{"left":0.8287899,"top":0.070231445,"width":0.0051529254,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"viewed","depth":15,"bounds":{"left":0.83494014,"top":0.070231445,"width":0.013297873,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Checks pending","depth":14,"bounds":{"left":0.8565492,"top":0.0650439,"width":0.04338431,"height":0.022346368},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks pending","depth":16,"bounds":{"left":0.86619014,"top":0.070231445,"width":0.030751329,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Submit review","depth":14,"bounds":{"left":0.9025931,"top":0.0650439,"width":0.03856383,"height":0.022346368},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Submit","depth":16,"bounds":{"left":0.9055851,"top":0.070231445,"width":0.014793883,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"review","depth":16,"bounds":{"left":0.920379,"top":0.070231445,"width":0.012466756,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Open diff view settings","depth":14,"bounds":{"left":0.9438165,"top":0.0650439,"width":0.00930851,"height":0.022346368},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open overview panel","depth":14,"bounds":{"left":0.96143615,"top":0.0650439,"width":0.00930851,"height":0.022346368},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open comments panel","depth":14,"bounds":{"left":0.97207445,"top":0.0650439,"width":0.017287234,"height":0.022346368},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"(","depth":16,"bounds":{"left":0.98038566,"top":0.070231445,"width":0.0026595744,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":16,"bounds":{"left":0.9830452,"top":0.070231445,"width":0.0026595744,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":16,"bounds":{"left":0.9857048,"top":0.070231445,"width":0.0014960107,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Filter files…","depth":16,"bounds":{"left":0.33294547,"top":0.11332801,"width":0.06815159,"height":0.023942538},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Filter options","depth":16,"bounds":{"left":0.4040891,"top":0.112529926,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"File tree","depth":15,"bounds":{"left":0.32197472,"top":0.15083799,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"File tree","depth":16,"bounds":{"left":0.32197472,"top":0.15363128,"width":0.014295213,"height":0.0518755},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":19,"bounds":{"left":0.33793217,"top":0.15682362,"width":0.008144947,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Component/Activity/Services","depth":21,"bounds":{"left":0.34059176,"top":0.18276137,"width":0.061835106,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GetDefaultActivityTypeService.php","depth":23,"bounds":{"left":0.34325132,"top":0.20830008,"width":0.07496676,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GetDefaultActivityTypeService.php","depth":24,"bounds":{"left":0.34325132,"top":0.20830008,"width":0.07496676,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Listeners/Crm","depth":21,"bounds":{"left":0.34059176,"top":0.23383878,"width":0.030086435,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RemoteCrmRecordDeletedListener.php","depth":23,"bounds":{"left":0.34325132,"top":0.25937748,"width":0.084109046,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"RemoteCrmRecordDeletedListener.php","depth":24,"bounds":{"left":0.34325132,"top":0.25937748,"width":0.084109046,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Models","depth":21,"bounds":{"left":0.34059176,"top":0.2849162,"width":0.015625,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity.php","depth":23,"bounds":{"left":0.34325132,"top":0.31085396,"width":0.025265958,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity.php","depth":24,"bounds":{"left":0.34325132,"top":0.31085396,"width":0.025265958,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"PlaybookCategory.php","depth":23,"bounds":{"left":0.34325132,"top":0.33639267,"width":0.048537236,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"PlaybookCategory.php","depth":24,"bounds":{"left":0.34325132,"top":0.33639267,"width":0.048537236,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Services/Crm","depth":21,"bounds":{"left":0.34059176,"top":0.36193135,"width":0.028756648,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Close","depth":23,"bounds":{"left":0.34325132,"top":0.38747007,"width":0.012134309,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Service.php","depth":25,"bounds":{"left":0.3459109,"top":0.41340783,"width":0.025598405,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service.php","depth":26,"bounds":{"left":0.3459109,"top":0.41340783,"width":0.025598405,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Helpers","depth":23,"bounds":{"left":0.34325132,"top":0.43894652,"width":0.01662234,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ActivityPlaybookTrait.php","depth":25,"bounds":{"left":0.3459109,"top":0.46448523,"width":0.054521278,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ActivityPlaybookTrait.php","depth":26,"bounds":{"left":0.3459109,"top":0.46448523,"width":0.054521278,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"CrmHelperRepository.php","depth":25,"bounds":{"left":0.3459109,"top":0.49002394,"width":0.055684842,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CrmHelperRepository.php","depth":26,"bounds":{"left":0.3459109,"top":0.49002394,"width":0.055684842,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Listeners","depth":23,"bounds":{"left":0.34325132,"top":0.51556265,"width":0.019614361,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ConvertLeadActivities.php","depth":25,"bounds":{"left":0.3459109,"top":0.54110134,"width":0.05651596,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ConvertLeadActivities.php","depth":26,"bounds":{"left":0.3459109,"top":0.54110134,"width":0.05651596,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Salesforce","depth":23,"bounds":{"left":0.34325132,"top":0.5666401,"width":0.022606382,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fields","depth":25,"bounds":{"left":0.3459109,"top":0.5925778,"width":0.012632979,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"FieldHelper.php","depth":27,"bounds":{"left":0.34857047,"top":0.6181165,"width":0.033909574,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"FieldHelper.php","depth":28,"bounds":{"left":0.34857047,"top":0.6181165,"width":0.033909574,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ServiceTraits","depth":25,"bounds":{"left":0.3459109,"top":0.64365524,"width":0.027426861,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"FollowupActivityTrait.php","depth":27,"bounds":{"left":0.34857047,"top":0.669593,"width":0.053856384,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"FollowupActivityTrait.php","depth":28,"bounds":{"left":0.34857047,"top":0.669593,"width":0.053856384,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Service.php","depth":25,"bounds":{"left":0.3459109,"top":0.69513166,"width":0.025598405,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service.php","depth":26,"bounds":{"left":0.3459109,"top":0.69513166,"width":0.025598405,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"BaseService.php","depth":23,"bounds":{"left":0.34325132,"top":0.7206704,"width":0.036070477,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"BaseService.php","depth":24,"bounds":{"left":0.34325132,"top":0.7206704,"width":0.036070477,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tests/Unit","depth":19,"bounds":{"left":0.33793217,"top":0.7462091,"width":0.020777926,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Component/Activity/Services","depth":21,"bounds":{"left":0.34059176,"top":0.7717478,"width":0.061835106,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GetDefaultActivityTypeServiceTest.php","depth":23,"bounds":{"left":0.34325132,"top":0.79768556,"width":0.08344415,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GetDefaultActivityTypeServiceTest.php","depth":24,"bounds":{"left":0.34325132,"top":0.79768556,"width":0.08344415,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Services/Crm","depth":21,"bounds":{"left":0.34059176,"top":0.82322425,"width":0.028756648,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Helpers","depth":23,"bounds":{"left":0.34325132,"top":0.848763,"width":0.01662234,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ActivityPlaybookTraitTest.php","depth":25,"bounds":{"left":0.3459109,"top":0.8747007,"width":0.06333112,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ActivityPlaybookTraitTest.php","depth":26,"bounds":{"left":0.3459109,"top":0.8747007,"width":0.06333112,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"IntegrationApp","depth":23,"bounds":{"left":0.34325132,"top":0.9002394,"width":0.031914894,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ServiceTest.php","depth":25,"bounds":{"left":0.3459109,"top":0.92577815,"width":0.034242023,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ServiceTest.php","depth":26,"bounds":{"left":0.3459109,"top":0.92577815,"width":0.034242023,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Listeners","depth":23,"bounds":{"left":0.34325132,"top":0.95131683,"width":0.019614361,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ConvertLeadActivitiesTest.php","depth":25,"bounds":{"left":0.3459109,"top":0.9768556,"width":0.0653258,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ConvertLeadActivitiesTest.php","depth":26,"bounds":{"left":0.3459109,"top":0.9768556,"width":0.0653258,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Salesforce","depth":23,"bounds":{"left":0.34325132,"top":1.0,"width":0.022606382,"height":-0.0023941994},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fields","depth":25,"bounds":{"left":0.3459109,"top":1.0,"width":0.012632979,"height":-0.028331995},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ServiceTraits","depth":25,"bounds":{"left":0.3459109,"top":1.0,"width":0.027426861,"height":-0.07940936},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse file","depth":14,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"app/Component/Activity/Services/GetDefaultActivityTypeService.php","depth":15,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"app/Component/Activity/Services/GetDefaultActivityTypeService.php","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app/Component/Activity/Services/GetDefaultActivityTypeService.php","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy file name to clipboard","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Expand all lines: app/Component/Activity/Services/GetDefaultActivityTypeService.php","depth":15,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 7 additions & 1 deletion","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Not Viewed","depth":14,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Viewed","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Comment on this file","depth":14,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"More options","depth":14,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Original file line number","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Original file line","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Diff line number","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Diff line change","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"@@ -72,7 +72,13 @@ public function getForUserAndChannel(User $user, string $channel): ?PlaybookCate","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"72","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"private","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"function","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"playbookMatchesActivityPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activity","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"):","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"bool","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"72","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"private","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"function","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"playbookMatchesActivityPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activity","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"):","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"bool","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"73","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"{","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"73","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"{","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"74","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sidekickPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"=","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"this","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sidekickService","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getSidekickPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activity","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getUser","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"());","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"74","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sidekickPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"=","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"this","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sidekickService","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getSidekickPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activity","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getUser","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"());","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"75","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"// Sidekick playbook may be null, and the activity playbook may be null as well.","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"76","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"// Both can be soft-deleted.","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"77","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"// For that reason, at least one of the two playbooks must be guaranteed not to be null.","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"78","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sidekickPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"===","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"null","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") {","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"79","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"return","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":";","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"80","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"}","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"75","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"81","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"76","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"return","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activity","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getActivityType","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"()->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"()->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getId","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"() ===","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sidekickPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"?->getId();","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"82","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"return","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activity","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getActivityType","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"()","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"?","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->getPlaybook()","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"?","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->getId() ===","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sidekickPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"?->getId();","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"77","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"}","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"83","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"}","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"78","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"}","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"84","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"}","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Original file line number","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"@@ -72,7 +72,13 @@ public function getForUserAndChannel(User $user, string $channel): ?PlaybookCate","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"72","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"73","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"74","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"75","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"76","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"77","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"78","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Original file line","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"@@ -72,7 +72,13 @@ public function getForUserAndChannel(User $user, string $channel): ?PlaybookCate","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"private","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"function","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"playbookMatchesActivityPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activity","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"):","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"bool","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"{","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sidekickPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"=","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"this","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sidekickService","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getSidekickPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activity","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getUser","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"());","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"return","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activity","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getActivityType","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"()->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"()->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getId","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"() ===","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sidekickPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"?->getId();","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"}","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"}","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Diff line number","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"@@ -72,7 +72,13 @@ public function getForUserAndChannel(User $user, string $channel): ?PlaybookCate","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"72","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"73","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"74","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"75","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"76","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"77","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"78","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"79","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"80","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"81","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"82","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"83","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"84","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Diff line change","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"@@ -72,7 +72,13 @@ public function getForUserAndChannel(User $user, string $channel): ?PlaybookCate","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"private","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"function","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"playbookMatchesActivityPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activity","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"):","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"bool","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"{","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sidekickPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"=","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"this","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sidekickService","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getSidekickPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activity","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getUser","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"());","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"// Sidekick playbook may be null, and the activity playbook may be null as well.","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"// Both can be soft-deleted.","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"// For that reason, at least one of the two playbooks must be guaranteed not to be null.","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sidekickPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"===","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"null","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") {","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"return","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":";","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"}","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"return","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activity","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getActivityType","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"()","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"?","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->getPlaybook()","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"?","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"->getId() ===","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sidekickPlaybook","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"?->getId();","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"}","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"}","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand file","depth":14,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"app/Listeners/Crm/RemoteCrmRecordDeletedListener.php","depth":15,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"app/Listeners/Crm/RemoteCrmRecordDeletedListener.php","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app/Listeners/Crm/RemoteCrmRecordDeletedListener.php","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy file name to clipboard","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Expand all lines: app/Listeners/Crm/RemoteCrmRecordDeletedListener.php","depth":15,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 0 additions & 1 deletion","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Viewed","depth":14,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Viewed","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Comment on this file","depth":14,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"More options","depth":14,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand file","depth":14,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"app/Models/Activity.php","depth":15,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"app/Models/Activity.php","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app/Models/Activity.php","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy file name to clipboard","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Expand all lines: app/Models/Activity.php","depth":15,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 21 additions & 1 deletion","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Viewed","depth":14,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Viewed","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Comment on this file","depth":14,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"More options","depth":14,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand file","depth":14,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"app/Models/PlaybookCategory.php","depth":15,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"app/Models/PlaybookCategory.php","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app/Models/PlaybookCategory.php","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy file name to clipboard","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Expand all lines: app/Models/PlaybookCategory.php","depth":15,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 1 addition & 1 deletion","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Viewed","depth":14,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Viewed","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Comment on this file","depth":14,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"More options","depth":14,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand file","depth":14,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"app/Services/Crm/Close/Service.php","depth":15,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"app/Services/Crm/Close/Service.php","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
8805080314282581999
|
-5405306982803349200
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 2 Q2 - Platform Team - Scrum Board Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
New Tab
New Tab
AI reports promotion pages by nikolay-yankov · Pull Request #11998 · jiminny/app
AI reports promotion pages by nikolay-yankov · Pull Request #11998 · jiminny/app
JY-9712 | Nuges to expire after one year by nikolaybiaivanov · Pull Request #11981 · jiminny/app
JY-9712 | Nuges to expire after one year by nikolaybiaivanov · Pull Request #11981 · jiminny/app
Jiminny
Jiminny
Userpilot | Saved Reports
Userpilot | Saved Reports
Jiminny
Jiminny
Jy 20541 extract common traits by Vasil-Jiminny · Pull Request #12008 · jiminny/app
Jy 20541 extract common traits by Vasil-Jiminny · Pull Request #12008 · jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
Issues(g then i)
Pull requests
Repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (33)
Pull requests
(
33
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (32)
Security and quality
(
32
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
Jy 20541 extract common traits #12008 Edit title
Jy 20541 extract common traits
#
12008
Edit title
Preview
Preview
Checks pending
Checks pending
Code
Code
Open
Vasil-Jiminny
Vasil-Jiminny
wants to merge 37 commits into
master
master
from
JY-20541-extract-common-traits
JY-20541-extract-common-traits
Copy head branch name to clipboard
Lines changed: 1321 additions & 442 deletions
Conversation (5)
Conversation
(
5
)
Commits (37)
Commits
(
37
)
Checks (2)
Checks
(
2
)
Files changed (20)
Files changed
(
20
)
Pull Request Toolbar
Pull Request Toolbar
Collapse file tree
Open
Jy 20541 extract common traits
Jy 20541 extract common traits
#
12008
All commits
All commits
Vasil-Jiminny
Vasil-Jiminny
wants to merge 37 commits into
master
master
from
JY-20541-extract-common-traits
JY-20541-extract-common-traits
Copy head branch name to clipboard
16
/
20
viewed
Checks pending
Checks pending
Submit review
Submit
review
Open diff view settings
Open overview panel
Open comments panel
(
0
)
Filter files…
Filter options
File tree
File tree
app
Component/Activity/Services
GetDefaultActivityTypeService.php
GetDefaultActivityTypeService.php
Listeners/Crm
RemoteCrmRecordDeletedListener.php
RemoteCrmRecordDeletedListener.php
Models
Activity.php
Activity.php
PlaybookCategory.php
PlaybookCategory.php
Services/Crm
Close
Service.php
Service.php
Helpers
ActivityPlaybookTrait.php
ActivityPlaybookTrait.php
CrmHelperRepository.php
CrmHelperRepository.php
Listeners
ConvertLeadActivities.php
ConvertLeadActivities.php
Salesforce
Fields
FieldHelper.php
FieldHelper.php
ServiceTraits
FollowupActivityTrait.php
FollowupActivityTrait.php
Service.php
Service.php
BaseService.php
BaseService.php
tests/Unit
Component/Activity/Services
GetDefaultActivityTypeServiceTest.php
GetDefaultActivityTypeServiceTest.php
Services/Crm
Helpers
ActivityPlaybookTraitTest.php
ActivityPlaybookTraitTest.php
IntegrationApp
ServiceTest.php
ServiceTest.php
Listeners
ConvertLeadActivitiesTest.php
ConvertLeadActivitiesTest.php
Salesforce
Fields
ServiceTraits
Collapse file
app/Component/Activity/Services/GetDefaultActivityTypeService.php
app/Component/Activity/Services/GetDefaultActivityTypeService.php
app/Component/Activity/Services/GetDefaultActivityTypeService.php
Copy file name to clipboard
Expand all lines: app/Component/Activity/Services/GetDefaultActivityTypeService.php
Lines changed: 7 additions & 1 deletion
Not Viewed
Viewed
Comment on this file
More options
Original file line number
Original file line
Diff line number
Diff line change
@@ -72,7 +72,13 @@ public function getForUserAndChannel(User $user, string $channel): ?PlaybookCate
72
private
function
playbookMatchesActivityPlaybook
(
Activity
$
activity
):
bool
72
private
function
playbookMatchesActivityPlaybook
(
Activity
$
activity
):
bool
73
{
73
{
74
$
sidekickPlaybook
=
$
this
->
sidekickService
->
getSidekickPlaybook
(
$
activity
->
getUser
());
74
$
sidekickPlaybook
=
$
this
->
sidekickService
->
getSidekickPlaybook
(
$
activity
->
getUser
());
75
+
// Sidekick playbook may be null, and the activity playbook may be null as well.
76
+
// Both can be soft-deleted.
77
+
// For that reason, at least one of the two playbooks must be guaranteed not to be null.
78
+
if
(
$
sidekickPlaybook
===
null
) {
79
+
return
false
;
80
+
}
75
81
76
-
return
$
activity
->
getActivityType
()->
getPlaybook
()->
getId
() ===
$
sidekickPlaybook
?->getId();
82
+
return
$
activity
->
getActivityType
()
?
->getPlaybook()
?
->getId() ===
$
sidekickPlaybook
?->getId();
77
}
83
}
78
}
84
}
Original file line number
@@ -72,7 +72,13 @@ public function getForUserAndChannel(User $user, string $channel): ?PlaybookCate
72
73
74
75
76
77
78
Original file line
@@ -72,7 +72,13 @@ public function getForUserAndChannel(User $user, string $channel): ?PlaybookCate
private
function
playbookMatchesActivityPlaybook
(
Activity
$
activity
):
bool
{
$
sidekickPlaybook
=
$
this
->
sidekickService
->
getSidekickPlaybook
(
$
activity
->
getUser
());
-
return
$
activity
->
getActivityType
()->
getPlaybook
()->
getId
() ===
$
sidekickPlaybook
?->getId();
}
}
Diff line number
@@ -72,7 +72,13 @@ public function getForUserAndChannel(User $user, string $channel): ?PlaybookCate
72
73
74
75
76
77
78
79
80
81
82
83
84
Diff line change
@@ -72,7 +72,13 @@ public function getForUserAndChannel(User $user, string $channel): ?PlaybookCate
private
function
playbookMatchesActivityPlaybook
(
Activity
$
activity
):
bool
{
$
sidekickPlaybook
=
$
this
->
sidekickService
->
getSidekickPlaybook
(
$
activity
->
getUser
());
+
// Sidekick playbook may be null, and the activity playbook may be null as well.
+
// Both can be soft-deleted.
+
// For that reason, at least one of the two playbooks must be guaranteed not to be null.
+
if
(
$
sidekickPlaybook
===
null
) {
+
return
false
;
+
}
+
return
$
activity
->
getActivityType
()
?
->getPlaybook()
?
->getId() ===
$
sidekickPlaybook
?->getId();
}
}
Expand file
app/Listeners/Crm/RemoteCrmRecordDeletedListener.php
app/Listeners/Crm/RemoteCrmRecordDeletedListener.php
app/Listeners/Crm/RemoteCrmRecordDeletedListener.php
Copy file name to clipboard
Expand all lines: app/Listeners/Crm/RemoteCrmRecordDeletedListener.php
Lines changed: 0 additions & 1 deletion
Viewed
Viewed
Comment on this file
More options
Expand file
app/Models/Activity.php
app/Models/Activity.php
app/Models/Activity.php
Copy file name to clipboard
Expand all lines: app/Models/Activity.php
Lines changed: 21 additions & 1 deletion
Viewed
Viewed
Comment on this file
More options
Expand file
app/Models/PlaybookCategory.php
app/Models/PlaybookCategory.php
app/Models/PlaybookCategory.php
Copy file name to clipboard
Expand all lines: app/Models/PlaybookCategory.php
Lines changed: 1 addition & 1 deletion
Viewed
Viewed
Comment on this file
More options
Expand file
app/Services/Crm/Close/Service.php
app/Services/Crm/Close/Service.php...
|
NULL
|
|
21113
|
465
|
26
|
2026-04-15T09:51:08.714868+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776246668714_m1.jpg...
|
Boosteroid
|
Boosteroid
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackFileEditViewGoEDHomeDMsActivityFilesLater..• +SlackFileEditViewGoEDHomeDMsActivityFilesLater..•More+HistoryWindowHelp→Search Jiminny IncJiminny ... ~# curiosity_laD# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the _people_of jimi...• Direct messages. Galya DimitrovaAneliya Angelova, ...€. Vasil VasilevSteliyan GeorgievAdelina Petrova, Ili...P. Adelina Petrova0. Nikolay Nikolov2Galya Dimitrova, Ni...2 Galya Dimitrova, Ni...::: AppsJira CloudToast# thank-yous8 39• MessagesAdd canvasO Files+ngPet.Tuesday, April 7th~Claire, thank you so much for supportingme outside working hours with theRydoo addendum. I really appreciate it, asthey needed it urgently. You are a truechampion!View Recognition MomentTodayThe Loop APP 12:46 PMStoyan Tomov has received "Be Customer-Centred" eCard from Stefka Stoyanova® Stefka StoyanovaStoyan, thank you for stepping in quicklyand finding a way to export >4k activitieswith their metadata for Superside for justa few daysYou worked during Easterholidays and late nights to finish thisexport by the time promised to thecustomer AView Recognition Moment1 reply Today at 12:49 PMMessage #thank-yous+Aa...New(ahlSupport Daily • in 2h 9 m100% C8Wed 15 Apr 12:51:08159-14:~18185-zsh86-zshO ₴7.* Unable to a...88-zsh870977100%NOT SETNOT SETDISABLEDcb2-43df-bfba-9e0b498ec087", "trace_id":"7b83e85f-24e6-465b-8428-6f0ddf3e6f19"}"reportUuid":"2461bd36-1f8c-4162-b7dd-4c03ca39bd78"',"teamId":1, "expiresAt" :"2026-0-8428-6f0ddf3e6f19"}"reportUuid": "f278e4f1-0f02-40e7-9461-6d18992c7241", "teamId" :1, "expiresAt" :"2026-0s-8428-6f0ddf3e6f19"'}'reportUuid":"d88089d5-3c70-48c1-98a4-c8b60dab6852", "teamId" :1,"expiresAt":"2026-0-8428-6f0ddf3e6f19"}["reportUuid": "802607bc-9ef1-4203-b93e-560000552a5d", "teamId" :1, "expiresAt": "2026-0-8428-6f0ddf3e6f19"}"isFirstDay0fMonth" : false, "currentMonth":4, "isQuarterlyMonth" : true}{"correlation_n_id": "e067b865-fcb2-43df-bfba-9e0b498ec087", "trace_id":"7b83e85f-24e6-465b-8428-6lay (manual override) {"reportId":"38","reportUuid":"802607bc-9ef1-4203-b93e-560000$5b-8428-6f0ddf3e6f19"}ly (manual override) {"reportId": "38", "reportUuid": "802607bc-9ef1-4203-b93e-5600005ice_id":"7b83e85f-24e6-465b-8428-6f0ddf3e6f19"}srrelation_id":"e067b865-fcb2-43df-bfba-9e0b498ec087", "trace_id":"7b83e85f-24e6-465:port {"reportUuid": "802607bc-9ef1-4203-b93e-560000552a5d", "teamId" :1, "frequency" :"id":"7b83e85f-24e6-465b-8428-6f0ddf3e6f19"};-fcb2-43df-bfba-9e0b498ec087", "trace_id":"7b83e85f-24e6-465b-8428-6f0ddf3e6f19"}...
|
NULL
|
8804735694847909235
|
NULL
|
click
|
ocr
|
NULL
|
+SlackFileEditViewGoEDHomeDMsActivityFilesLater..• +SlackFileEditViewGoEDHomeDMsActivityFilesLater..•More+HistoryWindowHelp→Search Jiminny IncJiminny ... ~# curiosity_laD# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the _people_of jimi...• Direct messages. Galya DimitrovaAneliya Angelova, ...€. Vasil VasilevSteliyan GeorgievAdelina Petrova, Ili...P. Adelina Petrova0. Nikolay Nikolov2Galya Dimitrova, Ni...2 Galya Dimitrova, Ni...::: AppsJira CloudToast# thank-yous8 39• MessagesAdd canvasO Files+ngPet.Tuesday, April 7th~Claire, thank you so much for supportingme outside working hours with theRydoo addendum. I really appreciate it, asthey needed it urgently. You are a truechampion!View Recognition MomentTodayThe Loop APP 12:46 PMStoyan Tomov has received "Be Customer-Centred" eCard from Stefka Stoyanova® Stefka StoyanovaStoyan, thank you for stepping in quicklyand finding a way to export >4k activitieswith their metadata for Superside for justa few daysYou worked during Easterholidays and late nights to finish thisexport by the time promised to thecustomer AView Recognition Moment1 reply Today at 12:49 PMMessage #thank-yous+Aa...New(ahlSupport Daily • in 2h 9 m100% C8Wed 15 Apr 12:51:08159-14:~18185-zsh86-zshO ₴7.* Unable to a...88-zsh870977100%NOT SETNOT SETDISABLEDcb2-43df-bfba-9e0b498ec087", "trace_id":"7b83e85f-24e6-465b-8428-6f0ddf3e6f19"}"reportUuid":"2461bd36-1f8c-4162-b7dd-4c03ca39bd78"',"teamId":1, "expiresAt" :"2026-0-8428-6f0ddf3e6f19"}"reportUuid": "f278e4f1-0f02-40e7-9461-6d18992c7241", "teamId" :1, "expiresAt" :"2026-0s-8428-6f0ddf3e6f19"'}'reportUuid":"d88089d5-3c70-48c1-98a4-c8b60dab6852", "teamId" :1,"expiresAt":"2026-0-8428-6f0ddf3e6f19"}["reportUuid": "802607bc-9ef1-4203-b93e-560000552a5d", "teamId" :1, "expiresAt": "2026-0-8428-6f0ddf3e6f19"}"isFirstDay0fMonth" : false, "currentMonth":4, "isQuarterlyMonth" : true}{"correlation_n_id": "e067b865-fcb2-43df-bfba-9e0b498ec087", "trace_id":"7b83e85f-24e6-465b-8428-6lay (manual override) {"reportId":"38","reportUuid":"802607bc-9ef1-4203-b93e-560000$5b-8428-6f0ddf3e6f19"}ly (manual override) {"reportId": "38", "reportUuid": "802607bc-9ef1-4203-b93e-5600005ice_id":"7b83e85f-24e6-465b-8428-6f0ddf3e6f19"}srrelation_id":"e067b865-fcb2-43df-bfba-9e0b498ec087", "trace_id":"7b83e85f-24e6-465:port {"reportUuid": "802607bc-9ef1-4203-b93e-560000552a5d", "teamId" :1, "frequency" :"id":"7b83e85f-24e6-465b-8428-6f0ddf3e6f19"};-fcb2-43df-bfba-9e0b498ec087", "trace_id":"7b83e85f-24e6-465b-8428-6f0ddf3e6f19"}...
|
NULL
|
|
15412
|
347
|
0
|
2026-04-14T14:43:00.081743+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776177780081_m2.jpg...
|
Slack
|
Aneliya Angelova, Nikolay Yankov, Steliyan Georgie Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev (DM) - Jiminny Inc - 1 new item - Slack...
|
True
|
NULL
|
monitor_2
|
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
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
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Vasil Vasilev
Steliyan Georgiev
Adelina Petrova
,
Ilian Kyuchukov
,
Steliyan Georgiev
Adelina Petrova
Galya Dimitrova
Nikolay Nikolov
Galya Dimitrova
,
Nikolay Nikolov
Galya Dimitrova
,
Nikolay Yankov
Toast
Jira Cloud
Google Calendar
Messages
Messages
Add canvas
Add canvas
Files
Files
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Nikolay Yankov
Today at 1:51:43 PM
1:51 PM
Стели, има неокей линкове
image.png
Toggle file
image.png
6 replies
Last reply today at 2:58 PM
View thread
Nikolay Yankov
Today at 3:34:44 PM
3:34 PM
Стели, ще генерираме PDF
Today at 3:34:59 PM
3:34
да го пускаме ли или да изчакаме
Steliyan Georgiev
Today at 3:35:28 PM
3:35 PM
изчакайте 10 мин моля
Steliyan Georgiev
Today at 3:45:43 PM
3:45 PM
деплойнах на стейджинг, пускайте генериране ако искате
Nikolay Yankov
Today at 3:53:20 PM
3:53 PM
Лукаш, я пусни ново
Steliyan Georgiev
Today at 4:03:54 PM
4:03 PM
Това е последният
PDF
Toggle file
a46b03f8-5808-4425-842e-c73553cef224.pdf PDF
a46b03f8-5808-4425-842e-c73553cef224.pdf
PDF
Today at 4:04:12 PM
4:04
Има лого доколкото виждам?
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 4:04:20 PM
4:04
Линковете май са ОК?
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Nikolay Yankov
Today at 4:04:38 PM
4:04 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 4:04:45 PM
4:04
май сме окей
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 4:05:21 PM
4:05
я виж този ,май не са окей линковете
PDF
Toggle file
Test 7 - 13 Apr 2026.pdf PDF
Test 7 - 13 Apr 2026.pdf
PDF
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 4:05:25 PM
4:05
от преди 7 минути
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 4:05:27 PM
4:05
изпратен
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Steliyan Georgiev
Today at 4:08:40 PM
4:08 PM
Виждам 2 проблема с линковете:
линковете са в края на документа, а не инлайн в отговорите
има странни символи в тях. Това е защото в заглавията на срещите има някакви имотикони - тикви например, предполагам, че ги нямаме в шрифта на ПДФ-а. Не съм сигурен какво да ги правя?
@Nikolay Yankov
@Nikolay Yankov
, някой от горните ли имаш предвид или трето?
(edited)
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Nikolay Yankov
Today at 4:09:14 PM
4:09 PM
последния дето пратих
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Jiminny Inc","depth":12,"bounds":{"left":0.00546875,"top":0.05486111,"width":0.0125,"height":0.022222223},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Jiminny (Staging)","depth":12,"bounds":{"left":0.00546875,"top":0.09097222,"width":0.0125,"height":0.022222223},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Add workspaces","depth":12,"bounds":{"left":0.00546875,"top":0.12708333,"width":0.0125,"height":0.022222223},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"bounds":{"left":0.026953125,"top":0.048611112,"width":0.020703126,"height":0.047222223},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"bounds":{"left":0.03125,"top":0.08125,"width":0.012109375,"height":0.009027778},"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"bounds":{"left":0.026953125,"top":0.09583333,"width":0.020703126,"height":0.047222223},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"bounds":{"left":0.032421876,"top":0.12847222,"width":0.009765625,"height":0.009027778},"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"bounds":{"left":0.026953125,"top":0.14305556,"width":0.020703126,"height":0.047222223},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"bounds":{"left":0.0296875,"top":0.17569445,"width":0.015234375,"height":0.009027778},"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"bounds":{"left":0.026953125,"top":0.19027779,"width":0.020703126,"height":0.047222223},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"bounds":{"left":0.0328125,"top":0.22291666,"width":0.008984375,"height":0.009027778},"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"bounds":{"left":0.026953125,"top":0.2375,"width":0.020703126,"height":0.047222223},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"bounds":{"left":0.03203125,"top":0.2701389,"width":0.010546875,"height":0.009027778},"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"bounds":{"left":0.026953125,"top":0.2847222,"width":0.020703126,"height":0.047222223},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"bounds":{"left":0.03203125,"top":0.31736112,"width":0.010546875,"height":0.009027778},"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":20,"bounds":{"left":0.06679688,"top":0.0875,"width":0.022265624,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":20,"bounds":{"left":0.06679688,"top":0.10694444,"width":0.020703126,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":20,"bounds":{"left":0.06679688,"top":0.12638889,"width":0.021484375,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":20,"bounds":{"left":0.06679688,"top":0.14583333,"width":0.034375,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":20,"bounds":{"left":0.06679688,"top":0.16527778,"width":0.028515626,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":22,"bounds":{"left":0.07304688,"top":0.24722221,"width":0.05234375,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":22,"bounds":{"left":0.07304688,"top":0.29305556,"width":0.026171874,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":22,"bounds":{"left":0.07304688,"top":0.3125,"width":0.014453125,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":22,"bounds":{"left":0.07304688,"top":0.33194444,"width":0.021484375,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":22,"bounds":{"left":0.07304688,"top":0.3513889,"width":0.040625,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":22,"bounds":{"left":0.07304688,"top":0.37083334,"width":0.032421876,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":22,"bounds":{"left":0.07304688,"top":0.39027777,"width":0.03046875,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":22,"bounds":{"left":0.07304688,"top":0.4097222,"width":0.02265625,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"general","depth":22,"bounds":{"left":0.07304688,"top":0.42916667,"width":0.019140625,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"infra-changes","depth":22,"bounds":{"left":0.07304688,"top":0.4486111,"width":0.034765624,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":22,"bounds":{"left":0.07304688,"top":0.46805555,"width":0.02734375,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":22,"bounds":{"left":0.07304688,"top":0.4875,"width":0.041015625,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":22,"bounds":{"left":0.07304688,"top":0.5069444,"width":0.0453125,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"random","depth":22,"bounds":{"left":0.07304688,"top":0.5263889,"width":0.019921875,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":22,"bounds":{"left":0.07304688,"top":0.54583335,"width":0.020703126,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":22,"bounds":{"left":0.07304688,"top":0.56527776,"width":0.02890625,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"support","depth":22,"bounds":{"left":0.07304688,"top":0.5847222,"width":0.0203125,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":22,"bounds":{"left":0.07304688,"top":0.6041667,"width":0.02890625,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":22,"bounds":{"left":0.07304688,"top":0.6236111,"width":0.053125,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":22,"bounds":{"left":0.07304688,"top":0.66944444,"width":0.044140626,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"bounds":{"left":0.11679687,"top":0.66944444,"width":0.0078125,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":22,"bounds":{"left":0.11992188,"top":0.66944444,"width":0.016796876,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"bounds":{"left":0.13632813,"top":0.68472224,"width":0.000390625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":22,"bounds":{"left":0.13632813,"top":0.68472224,"width":0.000390625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":22,"bounds":{"left":0.07304688,"top":0.6888889,"width":0.03125,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":22,"bounds":{"left":0.07304688,"top":0.7083333,"width":0.044921875,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Adelina Petrova","depth":22,"bounds":{"left":0.07304688,"top":0.7277778,"width":0.040625,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"bounds":{"left":0.11328125,"top":0.7277778,"width":0.003125,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Ilian Kyuchukov","depth":22,"bounds":{"left":0.11601563,"top":0.7277778,"width":0.009375,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"bounds":{"left":0.13632813,"top":0.7430556,"width":0.000390625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":22,"bounds":{"left":0.13632813,"top":0.7430556,"width":0.000390625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Adelina Petrova","depth":22,"bounds":{"left":0.07304688,"top":0.74722224,"width":0.040625,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":22,"bounds":{"left":0.07304688,"top":0.76666665,"width":0.04140625,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":22,"bounds":{"left":0.07304688,"top":0.7861111,"width":0.040234376,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":22,"bounds":{"left":0.07304688,"top":0.8055556,"width":0.04140625,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"bounds":{"left":0.1140625,"top":0.8055556,"width":0.003125,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":22,"bounds":{"left":0.11679687,"top":0.8055556,"width":0.010546875,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":22,"bounds":{"left":0.07304688,"top":0.825,"width":0.04140625,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"bounds":{"left":0.1140625,"top":0.825,"width":0.003125,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":22,"bounds":{"left":0.11679687,"top":0.825,"width":0.010546875,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":22,"bounds":{"left":0.07304688,"top":0.87083334,"width":0.014453125,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":22,"bounds":{"left":0.07304688,"top":0.8902778,"width":0.02578125,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Google Calendar","depth":22,"bounds":{"left":0.07304688,"top":0.9097222,"width":0.0359375,"height":0.0125},"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":17,"bounds":{"left":0.14335938,"top":0.07986111,"width":0.036328126,"height":0.02638889},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":19,"bounds":{"left":0.15429688,"top":0.0875,"width":0.022265624,"height":0.011111111},"role_description":"text"},{"role":"AXRadioButton","text":"Add canvas","depth":18,"bounds":{"left":0.18085937,"top":0.07986111,"width":0.040234376,"height":0.02638889},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add canvas","depth":20,"bounds":{"left":0.19179687,"top":0.0875,"width":0.026171874,"height":0.011111111},"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":17,"bounds":{"left":0.22226563,"top":0.07986111,"width":0.024609376,"height":0.02638889},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":19,"bounds":{"left":0.23320313,"top":0.0875,"width":0.010546875,"height":0.011111111},"role_description":"text"},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":17,"bounds":{"left":0.24804688,"top":0.07986111,"width":0.012890625,"height":0.02638889},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":17,"bounds":{"left":0.13671875,"top":0.045138888,"width":0.01875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"List","depth":17,"bounds":{"left":0.13671875,"top":0.045138888,"width":0.009375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":17,"bounds":{"left":0.13671875,"top":0.045138888,"width":0.01640625,"height":0.00069444446},"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":23,"bounds":{"left":0.30273438,"top":0.110416666,"width":0.0296875,"height":0.019444445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Nikolay Yankov","depth":24,"bounds":{"left":0.16210938,"top":0.10069445,"width":0.040625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"bounds":{"left":0.20234375,"top":0.10069445,"width":0.003515625,"height":0.00069444446},"role_description":"text"},{"role":"AXLink","text":"Today at 1:51:43 PM","depth":24,"bounds":{"left":0.20546874,"top":0.10069445,"width":0.01796875,"height":0.00069444446},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:51 PM","depth":25,"bounds":{"left":0.20546874,"top":0.10069445,"width":0.01796875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Стели, има неокей линкове","depth":25,"bounds":{"left":0.16210938,"top":0.10069445,"width":0.07421875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"image.png","depth":25,"bounds":{"left":0.16210938,"top":0.10069445,"width":0.023046875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.18476562,"top":0.10069445,"width":0.001953125,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Toggle file","depth":25,"bounds":{"left":0.18632813,"top":0.10069445,"width":0.008203125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXLink","text":"image.png","depth":27,"bounds":{"left":0.16210938,"top":0.10069445,"width":0.140625,"height":0.00069444446},"role_description":"Unlabelled image","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"6 replies","depth":24,"bounds":{"left":0.18515626,"top":0.10069445,"width":0.019140625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Last reply today at 2:58 PM","depth":25,"bounds":{"left":0.20703125,"top":0.10069445,"width":0.06171875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"View thread","depth":25,"bounds":{"left":0.20703125,"top":0.10069445,"width":0.02734375,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Nikolay Yankov","depth":24,"bounds":{"left":0.16210938,"top":0.10069445,"width":0.040625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"bounds":{"left":0.20234375,"top":0.10069445,"width":0.003515625,"height":0.00069444446},"role_description":"text"},{"role":"AXLink","text":"Today at 3:34:44 PM","depth":24,"bounds":{"left":0.20546874,"top":0.10069445,"width":0.01796875,"height":0.00069444446},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3:34 PM","depth":25,"bounds":{"left":0.20546874,"top":0.10069445,"width":0.01796875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Стели, ще генерираме PDF","depth":25,"bounds":{"left":0.16210938,"top":0.10069445,"width":0.07382812,"height":0.00069444446},"role_description":"text"},{"role":"AXLink","text":"Today at 3:34:59 PM","depth":25,"bounds":{"left":0.14960937,"top":0.10069445,"width":0.009375,"height":0.00069444446},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3:34","depth":26,"bounds":{"left":0.14960937,"top":0.10069445,"width":0.009375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"да го пускаме ли или да изчакаме","depth":25,"bounds":{"left":0.16210938,"top":0.10069445,"width":0.0921875,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Steliyan Georgiev","depth":24,"bounds":{"left":0.16210938,"top":0.10069445,"width":0.046484374,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"bounds":{"left":0.21601562,"top":0.10069445,"width":0.003515625,"height":0.00069444446},"role_description":"text"},{"role":"AXLink","text":"Today at 3:35:28 PM","depth":24,"bounds":{"left":0.21914062,"top":0.10069445,"width":0.01796875,"height":0.00069444446},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3:35 PM","depth":25,"bounds":{"left":0.21914062,"top":0.10069445,"width":0.01796875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"изчакайте 10 мин моля","depth":25,"bounds":{"left":0.16210938,"top":0.10069445,"width":0.06328125,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Steliyan Georgiev","depth":24,"bounds":{"left":0.16210938,"top":0.10069445,"width":0.046484374,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"bounds":{"left":0.21601562,"top":0.10069445,"width":0.003515625,"height":0.00069444446},"role_description":"text"},{"role":"AXLink","text":"Today at 3:45:43 PM","depth":24,"bounds":{"left":0.21914062,"top":0.10069445,"width":0.01796875,"height":0.00069444446},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3:45 PM","depth":25,"bounds":{"left":0.21914062,"top":0.10069445,"width":0.01796875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"деплойнах на стейджинг, пускайте генериране ако искате","depth":25,"bounds":{"left":0.16210938,"top":0.10069445,"width":0.15742187,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Nikolay Yankov","depth":24,"bounds":{"left":0.16210938,"top":0.10069445,"width":0.040625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"bounds":{"left":0.20234375,"top":0.10069445,"width":0.003515625,"height":0.00069444446},"role_description":"text"},{"role":"AXLink","text":"Today at 3:53:20 PM","depth":24,"bounds":{"left":0.20546874,"top":0.10069445,"width":0.01796875,"height":0.00069444446},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3:53 PM","depth":25,"bounds":{"left":0.20546874,"top":0.10069445,"width":0.01796875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Лукаш, я пусни ново","depth":25,"bounds":{"left":0.16210938,"top":0.10069445,"width":0.05546875,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Steliyan Georgiev","depth":24,"bounds":{"left":0.16210938,"top":0.10069445,"width":0.046484374,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"bounds":{"left":0.21601562,"top":0.10069445,"width":0.003515625,"height":0.00069444446},"role_description":"text"},{"role":"AXLink","text":"Today at 4:03:54 PM","depth":24,"bounds":{"left":0.21914062,"top":0.10069445,"width":0.01796875,"height":0.00069444446},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:03 PM","depth":25,"bounds":{"left":0.21914062,"top":0.10069445,"width":0.01796875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Това е последният","depth":25,"bounds":{"left":0.16210938,"top":0.10069445,"width":0.050390624,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"PDF","depth":25,"bounds":{"left":0.16210938,"top":0.10069445,"width":0.01015625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.171875,"top":0.10069445,"width":0.0015625,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Toggle file","depth":25,"bounds":{"left":0.17304687,"top":0.10069445,"width":0.008203125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXLink","text":"a46b03f8-5808-4425-842e-c73553cef224.pdf PDF","depth":25,"bounds":{"left":0.16210938,"top":0.10069445,"width":0.16640624,"height":0.05486111},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"a46b03f8-5808-4425-842e-c73553cef224.pdf","depth":26,"bounds":{"left":0.1859375,"top":0.10069445,"width":0.123046875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"PDF","depth":26,"bounds":{"left":0.1859375,"top":0.10069445,"width":0.01015625,"height":0.00069444446},"role_description":"text"},{"role":"AXLink","text":"Today at 4:04:12 PM","depth":25,"bounds":{"left":0.14960937,"top":0.16666667,"width":0.009375,"height":0.011111111},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:04","depth":26,"bounds":{"left":0.14960937,"top":0.16666667,"width":0.009375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Има лого доколкото виждам?","depth":25,"bounds":{"left":0.16210938,"top":0.16458334,"width":0.08125,"height":0.013194445},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"bounds":{"left":0.49140626,"top":0.14305556,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":26,"bounds":{"left":0.49140626,"top":0.14305556,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":26,"bounds":{"left":0.49140626,"top":0.14305556,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":26,"bounds":{"left":0.49140626,"top":0.14305556,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"bounds":{"left":0.49140626,"top":0.14305556,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"bounds":{"left":0.49140626,"top":0.14305556,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"bounds":{"left":0.49140626,"top":0.14305556,"width":0.000390625,"height":0.022916667},"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,"bounds":{"left":0.49140626,"top":0.14305556,"width":0.000390625,"height":0.022916667},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 4:04:20 PM","depth":25,"bounds":{"left":0.14960937,"top":0.1875,"width":0.009375,"height":0.011111111},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:04","depth":26,"bounds":{"left":0.14960937,"top":0.1875,"width":0.009375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Линковете май са ОК?","depth":25,"bounds":{"left":0.16210938,"top":0.18541667,"width":0.0609375,"height":0.013194445},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"bounds":{"left":0.49140626,"top":0.16388889,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":26,"bounds":{"left":0.49140626,"top":0.16388889,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":26,"bounds":{"left":0.49140626,"top":0.16388889,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":26,"bounds":{"left":0.49140626,"top":0.16388889,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"bounds":{"left":0.49140626,"top":0.16388889,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"bounds":{"left":0.49140626,"top":0.16388889,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"bounds":{"left":0.49140626,"top":0.16388889,"width":0.000390625,"height":0.022916667},"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,"bounds":{"left":0.49140626,"top":0.16388889,"width":0.000390625,"height":0.022916667},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Nikolay Yankov","depth":24,"bounds":{"left":0.16210938,"top":0.2048611,"width":0.040625,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"bounds":{"left":0.20234375,"top":0.20625,"width":0.003515625,"height":0.013194445},"role_description":"text"},{"role":"AXLink","text":"Today at 4:04:38 PM","depth":24,"bounds":{"left":0.20546874,"top":0.20833333,"width":0.01796875,"height":0.011111111},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:04 PM","depth":25,"bounds":{"left":0.20546874,"top":0.20833333,"width":0.01796875,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"има лого и линковете и на мен ми изглеждат окей","depth":25,"bounds":{"left":0.16210938,"top":0.22152779,"width":0.13710937,"height":0.013194445},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"bounds":{"left":0.49140626,"top":0.19305556,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":26,"bounds":{"left":0.49140626,"top":0.19305556,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":26,"bounds":{"left":0.49140626,"top":0.19305556,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":26,"bounds":{"left":0.49140626,"top":0.19305556,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"bounds":{"left":0.49140626,"top":0.19305556,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"bounds":{"left":0.49140626,"top":0.19305556,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"bounds":{"left":0.49140626,"top":0.19305556,"width":0.000390625,"height":0.022916667},"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,"bounds":{"left":0.49140626,"top":0.19305556,"width":0.000390625,"height":0.022916667},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 4:04:45 PM","depth":25,"bounds":{"left":0.14960937,"top":0.24444444,"width":0.009375,"height":0.011111111},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:04","depth":26,"bounds":{"left":0.14960937,"top":0.24444444,"width":0.009375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"май сме окей","depth":25,"bounds":{"left":0.16210938,"top":0.24236111,"width":0.036328126,"height":0.013194445},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"bounds":{"left":0.49140626,"top":0.22083333,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":26,"bounds":{"left":0.49140626,"top":0.22083333,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":26,"bounds":{"left":0.49140626,"top":0.22083333,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":26,"bounds":{"left":0.49140626,"top":0.22083333,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"bounds":{"left":0.49140626,"top":0.22083333,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"bounds":{"left":0.49140626,"top":0.22083333,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"bounds":{"left":0.49140626,"top":0.22083333,"width":0.000390625,"height":0.022916667},"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,"bounds":{"left":0.49140626,"top":0.22083333,"width":0.000390625,"height":0.022916667},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 4:05:21 PM","depth":25,"bounds":{"left":0.14960937,"top":0.26527777,"width":0.009375,"height":0.011111111},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:05","depth":26,"bounds":{"left":0.14960937,"top":0.26527777,"width":0.009375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"я виж този ,май не са окей линковете","depth":25,"bounds":{"left":0.16210938,"top":0.26319444,"width":0.1015625,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"PDF","depth":25,"bounds":{"left":0.16210938,"top":0.28125,"width":0.01015625,"height":0.011805556},"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.171875,"top":0.28125,"width":0.0015625,"height":0.013194445},"role_description":"text"},{"role":"AXButton","text":"Toggle file","depth":25,"bounds":{"left":0.17304687,"top":0.28055555,"width":0.008203125,"height":0.014583333},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXLink","text":"Test 7 - 13 Apr 2026.pdf PDF","depth":25,"bounds":{"left":0.16210938,"top":0.29791668,"width":0.16640624,"height":0.18263888},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Test 7 - 13 Apr 2026.pdf","depth":26,"bounds":{"left":0.1859375,"top":0.30555555,"width":0.06328125,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"PDF","depth":26,"bounds":{"left":0.1859375,"top":0.3201389,"width":0.01015625,"height":0.011805556},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"bounds":{"left":0.49140626,"top":0.24166666,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":26,"bounds":{"left":0.49140626,"top":0.24166666,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":26,"bounds":{"left":0.49140626,"top":0.24166666,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":26,"bounds":{"left":0.49140626,"top":0.24166666,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"bounds":{"left":0.49140626,"top":0.24166666,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"bounds":{"left":0.49140626,"top":0.24166666,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"bounds":{"left":0.49140626,"top":0.24166666,"width":0.000390625,"height":0.022916667},"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,"bounds":{"left":0.49140626,"top":0.24166666,"width":0.000390625,"height":0.022916667},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 4:05:25 PM","depth":25,"bounds":{"left":0.14960937,"top":0.49166667,"width":0.009375,"height":0.011111111},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:05","depth":26,"bounds":{"left":0.14960937,"top":0.49166667,"width":0.009375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"от преди 7 минути","depth":25,"bounds":{"left":0.16210938,"top":0.48958334,"width":0.051171876,"height":0.013194445},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"bounds":{"left":0.49140626,"top":0.46805555,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":26,"bounds":{"left":0.49140626,"top":0.46805555,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":26,"bounds":{"left":0.49140626,"top":0.46805555,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":26,"bounds":{"left":0.49140626,"top":0.46805555,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"bounds":{"left":0.49140626,"top":0.46805555,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"bounds":{"left":0.49140626,"top":0.46805555,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"bounds":{"left":0.49140626,"top":0.46805555,"width":0.000390625,"height":0.022916667},"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,"bounds":{"left":0.49140626,"top":0.46805555,"width":0.000390625,"height":0.022916667},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 4:05:27 PM","depth":25,"bounds":{"left":0.14960937,"top":0.5125,"width":0.009375,"height":0.011111111},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:05","depth":26,"bounds":{"left":0.14960937,"top":0.5125,"width":0.009375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"изпратен","depth":25,"bounds":{"left":0.16210938,"top":0.5104167,"width":0.025,"height":0.013194445},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"bounds":{"left":0.49140626,"top":0.4888889,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":26,"bounds":{"left":0.49140626,"top":0.4888889,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":26,"bounds":{"left":0.49140626,"top":0.4888889,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":26,"bounds":{"left":0.49140626,"top":0.4888889,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"bounds":{"left":0.49140626,"top":0.4888889,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"bounds":{"left":0.49140626,"top":0.4888889,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"bounds":{"left":0.49140626,"top":0.4888889,"width":0.000390625,"height":0.022916667},"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,"bounds":{"left":0.49140626,"top":0.4888889,"width":0.000390625,"height":0.022916667},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Steliyan Georgiev","depth":24,"bounds":{"left":0.16210938,"top":0.5298611,"width":0.046484374,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"bounds":{"left":0.21601562,"top":0.53125,"width":0.003515625,"height":0.013194445},"role_description":"text"},{"role":"AXLink","text":"Today at 4:08:40 PM","depth":24,"bounds":{"left":0.21914062,"top":0.53333336,"width":0.01796875,"height":0.011111111},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:08 PM","depth":25,"bounds":{"left":0.21914062,"top":0.53333336,"width":0.01796875,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Виждам 2 проблема с линковете:","depth":25,"bounds":{"left":0.16210938,"top":0.5465278,"width":0.09140625,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.16328125,"top":0.56319445,"width":0.00625,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"линковете са в края на документа, а не инлайн в отговорите","depth":26,"bounds":{"left":0.17304687,"top":0.56180555,"width":0.16367188,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.16328125,"top":0.5784722,"width":0.00625,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"има странни символи в тях. Това е защото в заглавията на срещите има някакви имотикони - тикви например, предполагам, че ги нямаме в шрифта на ПДФ-а. Не съм сигурен какво да ги правя?","depth":26,"bounds":{"left":0.17304687,"top":0.57708335,"width":0.2984375,"height":0.028472222},"role_description":"text"},{"role":"AXLink","text":"@Nikolay Yankov","depth":24,"bounds":{"left":0.16210938,"top":0.6125,"width":0.0453125,"height":0.014583333},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"@Nikolay Yankov","depth":25,"bounds":{"left":0.16289063,"top":0.61319447,"width":0.04375,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":", някой от горните ли имаш предвид или трето?","depth":24,"bounds":{"left":0.20703125,"top":0.61319447,"width":0.13046876,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"bounds":{"left":0.3371094,"top":0.6145833,"width":0.0015625,"height":0.011805556},"role_description":"text"},{"role":"AXStaticText","text":"(edited)","depth":24,"bounds":{"left":0.33828124,"top":0.6145833,"width":0.0171875,"height":0.011805556},"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"bounds":{"left":0.35507813,"top":0.6145833,"width":0.0015625,"height":0.011805556},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"bounds":{"left":0.49140626,"top":0.51805556,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":26,"bounds":{"left":0.49140626,"top":0.51805556,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":26,"bounds":{"left":0.49140626,"top":0.51805556,"width":0.000390625,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":26,"bounds":{"left":0.49140626,"top":0.51805556,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"bounds":{"left":0.49140626,"top":0.51805556,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"bounds":{"left":0.49140626,"top":0.51805556,"width":0.000390625,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"bounds":{"left":0.49140626,"top":0.51805556,"width":0.000390625,"height":0.022916667},"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,"bounds":{"left":0.49140626,"top":0.51805556,"width":0.000390625,"height":0.022916667},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Nikolay Yankov","depth":24,"bounds":{"left":0.16210938,"top":0.6326389,"width":0.040625,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":24,"bounds":{"left":0.20234375,"top":0.6340278,"width":0.003515625,"height":0.013194445},"role_description":"text"},{"role":"AXLink","text":"Today at 4:09:14 PM","depth":24,"bounds":{"left":0.20546874,"top":0.63611114,"width":0.01796875,"height":0.011111111},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:09 PM","depth":25,"bounds":{"left":0.20546874,"top":0.63611114,"width":0.01796875,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"последния дето пратих","depth":25,"bounds":{"left":0.16210938,"top":0.6493056,"width":0.06367187,"height":0.013194445},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":26,"bounds":{"left":0.38984376,"top":0.6215278,"width":0.0125,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with eyes","depth":26,"bounds":{"left":0.40234375,"top":0.6215278,"width":0.0125,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"React with raised_hands","depth":26,"bounds":{"left":0.41484374,"top":0.6215278,"width":0.0125,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add reaction…","depth":26,"bounds":{"left":0.42734376,"top":0.6215278,"width":0.0125,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":26,"bounds":{"left":0.43984374,"top":0.6215278,"width":0.0125,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":26,"bounds":{"left":0.45234376,"top":0.6215278,"width":0.0125,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":26,"bounds":{"left":0.46484375,"top":0.6215278,"width":0.0125,"height":0.022916667},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8803751937774108138
|
-1569058485568091832
|
idle
|
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
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
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Vasil Vasilev
Steliyan Georgiev
Adelina Petrova
,
Ilian Kyuchukov
,
Steliyan Georgiev
Adelina Petrova
Galya Dimitrova
Nikolay Nikolov
Galya Dimitrova
,
Nikolay Nikolov
Galya Dimitrova
,
Nikolay Yankov
Toast
Jira Cloud
Google Calendar
Messages
Messages
Add canvas
Add canvas
Files
Files
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Nikolay Yankov
Today at 1:51:43 PM
1:51 PM
Стели, има неокей линкове
image.png
Toggle file
image.png
6 replies
Last reply today at 2:58 PM
View thread
Nikolay Yankov
Today at 3:34:44 PM
3:34 PM
Стели, ще генерираме PDF
Today at 3:34:59 PM
3:34
да го пускаме ли или да изчакаме
Steliyan Georgiev
Today at 3:35:28 PM
3:35 PM
изчакайте 10 мин моля
Steliyan Georgiev
Today at 3:45:43 PM
3:45 PM
деплойнах на стейджинг, пускайте генериране ако искате
Nikolay Yankov
Today at 3:53:20 PM
3:53 PM
Лукаш, я пусни ново
Steliyan Georgiev
Today at 4:03:54 PM
4:03 PM
Това е последният
PDF
Toggle file
a46b03f8-5808-4425-842e-c73553cef224.pdf PDF
a46b03f8-5808-4425-842e-c73553cef224.pdf
PDF
Today at 4:04:12 PM
4:04
Има лого доколкото виждам?
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 4:04:20 PM
4:04
Линковете май са ОК?
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Nikolay Yankov
Today at 4:04:38 PM
4:04 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 4:04:45 PM
4:04
май сме окей
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 4:05:21 PM
4:05
я виж този ,май не са окей линковете
PDF
Toggle file
Test 7 - 13 Apr 2026.pdf PDF
Test 7 - 13 Apr 2026.pdf
PDF
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 4:05:25 PM
4:05
от преди 7 минути
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 4:05:27 PM
4:05
изпратен
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Steliyan Georgiev
Today at 4:08:40 PM
4:08 PM
Виждам 2 проблема с линковете:
линковете са в края на документа, а не инлайн в отговорите
има странни символи в тях. Това е защото в заглавията на срещите има някакви имотикони - тикви например, предполагам, че ги нямаме в шрифта на ПДФ-а. Не съм сигурен какво да ги правя?
@Nikolay Yankov
@Nikolay Yankov
, някой от горните ли имаш предвид или трето?
(edited)
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Nikolay Yankov
Today at 4:09:14 PM
4:09 PM
последния дето пратих
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
SackFileFoitViewHistoryWindowHelpSearch Jiminny IncJiminny ...Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev84)= UnreadsMessagestP Add canvase) ThreadsDMs6d Huddles• Drafts & sent8 DirectoriesAchivityEh External connectionsFiles* Starred• platform-inner-team* Channels# al-chapter# alertsMore# backend# confusion-clinia# curiosity labiengineering# frontend# general#: infra-changes# iiminnv-be#: platform-tickets# product_launches#: randomuc releases#: soha-ofhce# support# thank-vousac the neone or umi....Direct messazesAneliya Angelova, .Vasil VasilevStelivan Georgiev3 Adelina Petrova, Ili..• Adelina Petrova. Galva Dimitrova *Da Nikolay Nikolov "2 Galva Dimitrova, Ni..2 Galya Dimitrova, Ni...*AppsToast7 Jira CloudGooge cale..4e Filesloday"Има лого доколкото виждам?Линковете май са ОК!Nikolay Yankov 4:04 PMима лого и линковете и на мен ми изглеждат океймай сме окейя виж пози май не са океи минковетеPDFTest 7 - 13 Apr 2026.pdfPDFJIMINNYот преди / минутииапhатенSteliyan Georgiev 4:08 PMВиждам 2 проблема с линковете:• линковете са в края на документа, а не инлаин в отговорите• има странни символи в тях. Гова е защото в заглавията на срещите има някакви имотFind another reactionпредполагам, че ги нямаме в шрифта на піду-а. не сьм сигурен какво да ги правя.@Nikolay Yankov, някой от горните ли имаш предвид или трето? (edited)Nikolay Yankov 4:09 PMпослелния лето поатих.Steliyan Georgiev 4:09 PMда, за него говоря и азNikolay Yankov 4:10 PMможе ои да ги скипваме такива emojisмане поечаї на поошесвансто и огговораSteliyan Georgiev 4:10 PMне сьм много сигурен какLukas Kovalik 5:41 PMсега ще го довавя това за disable on expired, после може да се тества по сьщия начин като генериране сьс сьщатакомандаMessage Aneliva Angelova. Nikolay Yankov, Stelivan GeorgievAaQutomaleakeporssenecommana.ongCreateHeldActivityevent.phputomatedReportsCallbackService.phpone09.mp4194sk solt.mo41 of 138 selected, 2,12 TB availablebon::created year: 2024,• Retro - Plattorm • 33 m left100% |45]Tue 14 Apr 17:42:59= custom.log=aravel.loeL SF (iminny@localhostc HS_local fiminny@localhost)& console (EU]L console [STAGING] XIx. AUto vHaycroundvliminny018 416 ×,13 ^116 V 20 A524525=11laybooks p 1..n<->I: on g.playbook_1d = p.1d where g.team_1d = 1:=505,528Cean_1d = 1;id = 175;mes wnere olaydook 10 =1o.= 7160:ane licon in = 7160:Workgory_1d, user_1d, lead_1d, contact_1d, account_1d, opportunity_1d, stage_1dDate Mocitiedtranscription_1d, statusToday at 17:41d = 1 and type = "conterence"loaay al 1/.5/odav at 10:091,44924.4rt time IS NOT NULI9 Apr 2026 at 14:479 Apr 2026 at 10:07362,6748.8783: # 00U0400000pCzoiMAC?Aor 2026 at 10.167 Apr 2026 at 10:016 Apr 2026 at 17:201,04575,54.34dllle6 Apr 2026 at 10:083 Apr 2026 at 10:211 Apr 2026 at 12.2031 Mar 2026 at 18:2931 Mar 2026 at 10:10720,51,024.083,4923,6.1d = pc.playbook_1d'event':Xo Mar 2026 at 1/.122,/1uration_1a = 1 and object_type = "event":field_id = 4;-553554Juln playwook_Layouts puK».n. on Cuao = oL.avoUt 101 and pl.plavbook id = 1751555556557Orts r.id5581 56€561562r.expares. at Is null);oay. 14,563T_results where report 1a IN (1o, 55):564-565es where 10 = 107021566filters where activity search_ id = 10932:567 V568569— 57€571572ts order by id desc;t_results order by id desc;t_results where report 1d IN (37)*ts WHERE vuld_to_b1n('18a06a75-afd2-476f-aadc-14d405/bdda2') = uu1d574w windsurt leams30:46uir-oia 4 spaces...
|
15410
|
|
76575
|
1920
|
33
|
2026-04-24T08:09:06.159558+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777018146159_m2.jpg...
|
Firefox
|
[JY-20543] AJ Reports > Tracking - Jira — Work
|
True
|
jiminny.atlassian.net/browse/JY-20543?search_id=f4 jiminny.atlassian.net/browse/JY-20543?search_id=f484c0ee-9edf-42e1-8cff-52c73f5b3a7e&referrer=quick-find...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
[JY-20543] AJ Reports > Tracking - Jira
JY-2048 [JY-20543] AJ Reports > Tracking - Jira
JY-20489 | Optimize Nudges - Phase 2 by yalokin-jiminny · Pull Request #11997 · jiminny/app
JY-20489 | Optimize Nudges - Phase 2 by yalokin-jiminny · Pull Request #11997 · jiminny/app
New Tab
New Tab
AI reports promotion pages by nikolay-yankov · Pull Request #11998 · jiminny/app
AI reports promotion pages by nikolay-yankov · Pull Request #11998 · jiminny/app
Pull requests · jiminny/app
Pull requests · jiminny/app
JY-20157 add not enough activities notification by LakyLak · Pull Request #12011 · jiminny/app
JY-20157 add not enough activities notification by LakyLak · Pull Request #12011 · jiminny/app
Jiminny
Jiminny
Userpilot | Nudge-created
Userpilot | Nudge-created
Summary - app in Jiminny SonarQube Cloud
Summary - app in Jiminny SonarQube Cloud
Pipelines - jiminny/app
Pipelines - jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
tracking
tracking
Create
Create
Rovo Ask Rovo
Ask Rovo
1 Notification
1 Notification
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New) Jiminny (New)
Jiminny (New)
/
Epic - Change parent
JY-19240
JY-19240
/
Story - Change work type
JY-20543
JY-20543
Copy link
AJ Reports > Tracking- Summary, edit
AJ Reports > Tracking
AJ Reports > Tracking
Add or create work related to this Story
Add or create work related to this Story
View app actions
View app actions
Collapse Description Description
Collapse Description
Collapse Description
Description
Edit Description, edit
We want to be able to track the usage of the
AJ
reports. We will use this to keep track of the adoption but also to use Userpilot tooltips to push users who are not using it to use it.
track each generated reports in
DD
- include company name and frequency
for AJ reports - track each generated report in UserPilot as an event on the user - track it only for the user who has created the report
for Exec reports - track each generated report - set the tracking for each user in the non-jiminny participants list
note: for UP you can see how we currently track events such as Logged-activity, Held-conference
Subtasks
Subtasks
Add subtask
Add subtask
Linked work items
Linked work items
Add linked work item
Add linked work item
Collapse Activity Activity
Collapse Activity
Collapse Activity
Activity
All
All
Comments
Comments
History
History
Work log
Work log
Atlassian Intelligence Summarise
Summarise
Newest first Newest first
Newest first
Add a comment…
Suggest a reply...
Suggest a reply...
Status update......
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"[JY-20543] AJ Reports > Tracking - Jira","depth":4,"bounds":{"left":0.23287898,"top":0.0518755,"width":0.07596409,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXRadioButton","text":"JY-20489 | Optimize Nudges - Phase 2 by yalokin-jiminny · Pull Request #11997 · jiminny/app","depth":4,"bounds":{"left":0.23105054,"top":0.09497207,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20489 | Optimize Nudges - Phase 2 by yalokin-jiminny · Pull Request #11997 · jiminny/app","depth":5,"bounds":{"left":0.2443484,"top":0.10614525,"width":0.1619016,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.23105054,"top":0.12769353,"width":0.07962101,"height":0.032721467},"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.2443484,"top":0.13886672,"width":0.014960106,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"AI reports promotion pages by nikolay-yankov · Pull Request #11998 · jiminny/app","depth":4,"bounds":{"left":0.23105054,"top":0.16041501,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AI reports promotion pages by nikolay-yankov · Pull Request #11998 · jiminny/app","depth":5,"bounds":{"left":0.2443484,"top":0.17158818,"width":0.14128989,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pull requests · jiminny/app","depth":4,"bounds":{"left":0.23105054,"top":0.19313647,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · jiminny/app","depth":5,"bounds":{"left":0.2443484,"top":0.20430966,"width":0.04537899,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20157 add not enough activities notification by LakyLak · Pull Request #12011 · jiminny/app","depth":4,"bounds":{"left":0.23105054,"top":0.22585794,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20157 add not enough activities notification by LakyLak · Pull Request #12011 · jiminny/app","depth":5,"bounds":{"left":0.2443484,"top":0.23703113,"width":0.16356383,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.23105054,"top":0.2585794,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.2443484,"top":0.2697526,"width":0.013131649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Userpilot | Nudge-created","depth":4,"bounds":{"left":0.23105054,"top":0.29130086,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Userpilot | Nudge-created","depth":5,"bounds":{"left":0.2443484,"top":0.30247405,"width":0.04537899,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Summary - app in Jiminny SonarQube Cloud","depth":4,"bounds":{"left":0.23105054,"top":0.32402235,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summary - app in Jiminny SonarQube Cloud","depth":5,"bounds":{"left":0.2443484,"top":0.33519554,"width":0.07679521,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.23105054,"top":0.3567438,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.2443484,"top":0.367917,"width":0.039228722,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.23387633,"top":0.39106146,"width":0.07413564,"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.23387633,"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 Google Gemini (⌃X)","depth":6,"bounds":{"left":0.24484707,"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":"Tabs from other devices","depth":6,"bounds":{"left":0.25598404,"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.26712102,"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.27825797,"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":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.32130983,"top":0.07861133,"width":0.016954787,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.32130983,"top":0.097765364,"width":0.016954787,"height":0.01396648},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.32130983,"top":0.097765364,"width":0.016954787,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.32130983,"top":0.11691939,"width":0.016954787,"height":0.01396648},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.32130983,"top":0.11691939,"width":0.016954787,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.32130983,"top":0.13607343,"width":0.029421542,"height":0.01396648},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.32130983,"top":0.13607343,"width":0.029421542,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.3146609,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.31981382,"top":0.06344773,"width":0.039727394,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.32662898,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.33178192,"top":0.06344773,"width":0.044215426,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.33992687,"top":0.057861134,"width":0.029421542,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"tracking","depth":11,"bounds":{"left":0.52011305,"top":0.06264964,"width":0.24268617,"height":0.015961692},"value":"tracking","help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"tracking","depth":12,"bounds":{"left":0.52011305,"top":0.06384677,"width":0.017785905,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.77111036,"top":0.057861134,"width":0.030086435,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.78241354,"top":0.06384677,"width":0.014793883,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.9119016,"top":0.057861134,"width":0.035904255,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.9232048,"top":0.06384677,"width":0.020611702,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"1 Notification","depth":12,"bounds":{"left":0.94913566,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1 Notification","depth":14,"bounds":{"left":0.95428854,"top":0.06344773,"width":0.028590426,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.96110374,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.9662567,"top":0.06344773,"width":0.010139627,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.9730718,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.97822475,"top":0.06344773,"width":0.017952127,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.9850399,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.99019283,"top":0.06344773,"width":0.009807169,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.3146609,"top":0.09976058,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.3252992,"top":0.10574621,"width":0.01662234,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Recent","depth":12,"bounds":{"left":0.3146609,"top":0.12529927,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.3252992,"top":0.13128492,"width":0.015458777,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Starred","depth":12,"bounds":{"left":0.3146609,"top":0.15083799,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.3252992,"top":0.15682362,"width":0.016456118,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.3146609,"top":0.1763767,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.3252992,"top":0.18236233,"width":0.011635638,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.38414228,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.3146609,"top":0.2019154,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"bounds":{"left":0.3252992,"top":0.20790103,"width":0.016456118,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.36751994,"top":0.20510775,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.37682846,"top":0.20510775,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.32064494,"top":0.23423783,"width":0.013464096,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"bounds":{"left":0.31865028,"top":0.2529928,"width":0.0674867,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"bounds":{"left":0.32928857,"top":0.25897846,"width":0.032081116,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"bounds":{"left":0.31998006,"top":0.25618514,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":18,"bounds":{"left":0.36751994,"top":0.25618514,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"bounds":{"left":0.37682846,"top":0.25618514,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":19,"bounds":{"left":0.3226396,"top":0.27853152,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":22,"bounds":{"left":0.3332779,"top":0.28451717,"width":0.032247342,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.38414228,"top":0.28172386,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":19,"bounds":{"left":0.3226396,"top":0.30407023,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":22,"bounds":{"left":0.3332779,"top":0.31005585,"width":0.024102394,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.38414228,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":19,"bounds":{"left":0.3226396,"top":0.32960895,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":22,"bounds":{"left":0.3332779,"top":0.33559456,"width":0.03125,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.38414228,"top":0.33280128,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":19,"bounds":{"left":0.3226396,"top":0.35514766,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":22,"bounds":{"left":0.3332779,"top":0.36113328,"width":0.050531916,"height":0.030726258},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.38414228,"top":0.35834,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":19,"bounds":{"left":0.3226396,"top":0.38068634,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":22,"bounds":{"left":0.3332779,"top":0.386672,"width":0.038231384,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.38414228,"top":0.38387868,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"bounds":{"left":0.31865028,"top":0.40622506,"width":0.0674867,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":20,"bounds":{"left":0.32928857,"top":0.4122107,"width":0.03025266,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"bounds":{"left":0.3854721,"top":0.4094174,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More spaces","depth":17,"bounds":{"left":0.31865028,"top":0.43176377,"width":0.0674867,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"bounds":{"left":0.32928857,"top":0.43774942,"width":0.028756648,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"bounds":{"left":0.3146609,"top":0.45730248,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Filters","depth":15,"bounds":{"left":0.3252992,"top":0.4632881,"width":0.013796543,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":13,"bounds":{"left":0.38414228,"top":0.46049482,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dashboards","depth":12,"bounds":{"left":0.3146609,"top":0.4828412,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dashboards","depth":15,"bounds":{"left":0.3252992,"top":0.4888268,"width":0.026761968,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create dashboard","depth":13,"bounds":{"left":0.38613698,"top":0.48603353,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create dashboard","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dashboards","depth":13,"bounds":{"left":0.3934508,"top":0.48603353,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dashboards","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Operations","depth":12,"bounds":{"left":0.3146609,"top":0.5083799,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Operations","depth":15,"bounds":{"left":0.3252992,"top":0.5143655,"width":0.02443484,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Operations","depth":13,"bounds":{"left":0.38414228,"top":0.51157224,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Operations","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Confluence , (opens new window)","depth":13,"bounds":{"left":0.3146609,"top":0.5434956,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Confluence","depth":17,"bounds":{"left":0.3252992,"top":0.5494813,"width":0.025764627,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.3146609,"top":0.55706304,"width":0.04837101,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Teams , (opens new window)","depth":13,"bounds":{"left":0.3146609,"top":0.56903434,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Teams","depth":17,"bounds":{"left":0.3252992,"top":0.57501996,"width":0.014793883,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.3146609,"top":0.5826017,"width":0.04837101,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"open menu","depth":14,"bounds":{"left":0.37483376,"top":0.57222664,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"open menu","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Customise sidebar","depth":12,"bounds":{"left":0.3146609,"top":0.60415006,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Customise sidebar","depth":15,"bounds":{"left":0.3252992,"top":0.6101357,"width":0.04155585,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Resize side navigation panel","depth":13,"bounds":{"left":0.44198802,"top":0.0981644,"width":0.062333778,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Spaces","depth":15,"bounds":{"left":0.40242687,"top":0.10933759,"width":0.013962766,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Spaces","depth":17,"bounds":{"left":0.40242687,"top":0.11292897,"width":0.013962766,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.41821808,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New) Jiminny (New)","depth":15,"bounds":{"left":0.42370346,"top":0.10933759,"width":0.034574468,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":17,"bounds":{"left":0.43101728,"top":0.11292897,"width":0.027260639,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.46010637,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Epic - Change parent","depth":15,"bounds":{"left":0.4635971,"top":0.10933759,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"JY-19240","depth":15,"bounds":{"left":0.4715758,"top":0.10933759,"width":0.017952127,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-19240","depth":17,"bounds":{"left":0.4715758,"top":0.11292897,"width":0.017952127,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.49135637,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Story - Change work type","depth":15,"bounds":{"left":0.4948471,"top":0.10933759,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"JY-20543","depth":15,"bounds":{"left":0.5028258,"top":0.10933759,"width":0.018783245,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543","depth":17,"bounds":{"left":0.5028258,"top":0.11292897,"width":0.018783245,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link","depth":16,"bounds":{"left":0.5202792,"top":0.11213089,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AJ Reports > Tracking- Summary, edit","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"AJ Reports > Tracking","depth":11,"bounds":{"left":0.40309176,"top":0.1396648,"width":0.0831117,"height":0.022346368},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AJ Reports > Tracking","depth":12,"bounds":{"left":0.40309176,"top":0.13926576,"width":0.0831117,"height":0.023543496},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Add or create work related to this Story","depth":12,"bounds":{"left":0.40242687,"top":0.17158818,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add or create work related to this Story","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"View app actions","depth":12,"bounds":{"left":0.41572472,"top":0.17158818,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"View app actions","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Collapse Description Description","depth":11,"bounds":{"left":0.39444813,"top":0.20989625,"width":0.4537899,"height":0.025538707},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Description","depth":13,"bounds":{"left":0.39311835,"top":0.21308859,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse Description","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Description","depth":14,"bounds":{"left":0.40242687,"top":0.2150838,"width":0.029587766,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit Description, edit","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"We want to be able to track the usage of the","depth":14,"bounds":{"left":0.40309176,"top":0.23982441,"width":0.09857048,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AJ","depth":15,"bounds":{"left":0.50166225,"top":0.23982441,"width":0.005817819,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"reports. We will use this to keep track of the adoption but also to use Userpilot tooltips to push users who are not using it to use it.","depth":14,"bounds":{"left":0.50748,"top":0.23982441,"width":0.28773272,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"track each generated reports in","depth":16,"bounds":{"left":0.41107047,"top":0.26855546,"width":0.07047872,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DD","depth":17,"bounds":{"left":0.4815492,"top":0.26855546,"width":0.0068151597,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"- include company name and frequency","depth":16,"bounds":{"left":0.48836437,"top":0.26855546,"width":0.08892952,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for AJ reports - track each generated report in UserPilot as an event on the user - track it only for the user who has created the report","depth":16,"bounds":{"left":0.41107047,"top":0.29090184,"width":0.29388297,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for Exec reports - track each generated report - set the tracking for each user in the non-jiminny participants list","depth":16,"bounds":{"left":0.41107047,"top":0.31324822,"width":0.24650931,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"note: for UP you can see how we currently track events such as Logged-activity, Held-conference","depth":14,"bounds":{"left":0.40309176,"top":0.34197924,"width":0.21575798,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Subtasks","depth":11,"bounds":{"left":0.40242687,"top":0.39984038,"width":0.023936171,"height":0.015961692},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Subtasks","depth":12,"bounds":{"left":0.40242687,"top":0.40023944,"width":0.023936171,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add subtask","depth":12,"bounds":{"left":0.3984375,"top":0.42059058,"width":0.035405584,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add subtask","depth":14,"bounds":{"left":0.40242687,"top":0.42657623,"width":0.027426861,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Linked work items","depth":11,"bounds":{"left":0.40242687,"top":0.46528333,"width":0.04654255,"height":0.015961692},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Linked work items","depth":12,"bounds":{"left":0.40242687,"top":0.46568236,"width":0.04654255,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add linked work item","depth":12,"bounds":{"left":0.3984375,"top":0.48443735,"width":0.05418883,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add linked work item","depth":14,"bounds":{"left":0.40242687,"top":0.490423,"width":0.046210106,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Collapse Activity Activity","depth":12,"bounds":{"left":0.39444813,"top":0.5291301,"width":0.4537899,"height":0.025538707},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Activity","depth":14,"bounds":{"left":0.39311835,"top":0.5323224,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse Activity","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity","depth":15,"bounds":{"left":0.40242687,"top":0.5343176,"width":0.019946808,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All","depth":14,"bounds":{"left":0.4034242,"top":0.5602554,"width":0.01412899,"height":0.0207502},"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All","depth":16,"bounds":{"left":0.40774602,"top":0.56384677,"width":0.005485372,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Comments","depth":14,"bounds":{"left":0.41821808,"top":0.5602554,"width":0.032413565,"height":0.0207502},"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Comments","depth":16,"bounds":{"left":0.4225399,"top":0.56384677,"width":0.023769947,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"History","depth":14,"bounds":{"left":0.45129654,"top":0.5602554,"width":0.024268618,"height":0.0207502},"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"History","depth":16,"bounds":{"left":0.45561835,"top":0.56384677,"width":0.015625,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Work log","depth":14,"bounds":{"left":0.47623006,"top":0.5602554,"width":0.02825798,"height":0.0207502},"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Work log","depth":16,"bounds":{"left":0.48055187,"top":0.56384677,"width":0.019614361,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Atlassian Intelligence Summarise","depth":14,"bounds":{"left":0.829621,"top":0.5642458,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarise","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Newest first Newest first","depth":13,"bounds":{"left":0.8402593,"top":0.5642458,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Newest first","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add a comment…","depth":15,"bounds":{"left":0.4163896,"top":0.60415006,"width":0.43118352,"height":0.07182761},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Suggest a reply...","depth":17,"bounds":{"left":0.42237368,"top":0.6424581,"width":0.046708778,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Suggest a reply...","depth":19,"bounds":{"left":0.42636302,"top":0.6452514,"width":0.03873005,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Status update...","depth":17,"bounds":{"left":0.47041222,"top":0.6424581,"width":0.04305186,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
8803690202403844279
|
1662212697174801615
|
click
|
accessibility
|
NULL
|
[JY-20543] AJ Reports > Tracking - Jira
JY-2048 [JY-20543] AJ Reports > Tracking - Jira
JY-20489 | Optimize Nudges - Phase 2 by yalokin-jiminny · Pull Request #11997 · jiminny/app
JY-20489 | Optimize Nudges - Phase 2 by yalokin-jiminny · Pull Request #11997 · jiminny/app
New Tab
New Tab
AI reports promotion pages by nikolay-yankov · Pull Request #11998 · jiminny/app
AI reports promotion pages by nikolay-yankov · Pull Request #11998 · jiminny/app
Pull requests · jiminny/app
Pull requests · jiminny/app
JY-20157 add not enough activities notification by LakyLak · Pull Request #12011 · jiminny/app
JY-20157 add not enough activities notification by LakyLak · Pull Request #12011 · jiminny/app
Jiminny
Jiminny
Userpilot | Nudge-created
Userpilot | Nudge-created
Summary - app in Jiminny SonarQube Cloud
Summary - app in Jiminny SonarQube Cloud
Pipelines - jiminny/app
Pipelines - jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
tracking
tracking
Create
Create
Rovo Ask Rovo
Ask Rovo
1 Notification
1 Notification
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New) Jiminny (New)
Jiminny (New)
/
Epic - Change parent
JY-19240
JY-19240
/
Story - Change work type
JY-20543
JY-20543
Copy link
AJ Reports > Tracking- Summary, edit
AJ Reports > Tracking
AJ Reports > Tracking
Add or create work related to this Story
Add or create work related to this Story
View app actions
View app actions
Collapse Description Description
Collapse Description
Collapse Description
Description
Edit Description, edit
We want to be able to track the usage of the
AJ
reports. We will use this to keep track of the adoption but also to use Userpilot tooltips to push users who are not using it to use it.
track each generated reports in
DD
- include company name and frequency
for AJ reports - track each generated report in UserPilot as an event on the user - track it only for the user who has created the report
for Exec reports - track each generated report - set the tracking for each user in the non-jiminny participants list
note: for UP you can see how we currently track events such as Logged-activity, Held-conference
Subtasks
Subtasks
Add subtask
Add subtask
Linked work items
Linked work items
Add linked work item
Add linked work item
Collapse Activity Activity
Collapse Activity
Collapse Activity
Activity
All
All
Comments
Comments
History
History
Work log
Work log
Atlassian Intelligence Summarise
Summarise
Newest first Newest first
Newest first
Add a comment…
Suggest a reply...
Suggest a reply...
Status update......
|
NULL
|
|
63342
|
1371
|
1
|
2026-04-21T08:50:29.832632+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776761429832_m1.jpg...
|
iTerm2
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
SlackFileEditViewGoHistoryWindowHelpDOCKERO $1Sour SlackFileEditViewGoHistoryWindowHelpDOCKERO $1Source DB:NAS mount:Archive DB:Data dir:-zsh[+00m03s] • Counting sourceframes:elements:ul_events:ocr_text:meetings:[+00m03s] • Initialising tccreating tablescreating indexescreating FTS tabl[+00m04s] • Syncing data fcvideo_chunksframes (9093 rowsocr_text (5971 rcui_events (9970 гelements (687142meetings (2 rows)[+03m01s] • Updating FTS irelements_ftsframes_ftsui_events_fts[+06m41s] • Verifying DBframes:elements:ui_events:ocr_text:meetings:[+07m44s] *Copying data forsync 2026-04-20/2026-04-2110:48:54][2026-04-2110:48:54][2026-04-2110:48:54][2026-04-2110:48:54]ArchiTotalSync=====lukas@Lukas-Kovaliks-MacBodOKО $82(4.5G)-zsh• *3JiminnyProfileAll ItemsFavoritesWatchtower<› DeveloperVAULTSEmployeeEngineeringIntegration AccountsJiminnyV TAGS• 2FACSV Import 28.01.22LastPass Import 1.11.21C4udae Vit* Build full da...• *4screenpSearch in Jiminny2 results for "PLanhat"[EMAIL] log in ([EMAIL]> 0• Support Daily • in 3 h 10 m100% <78Tue 21 Apr 11:50:29Activity MonitorAll ProcessesCPUEnergyDiskNetworkProcess NameMem...ThreadsPortsPIDHelp+ New Item2269620752a Jiminny20765Employee vShareEdit40459858Planhat61937617472173623523usernamelukas.kovalik@jiminny.com2619861686password[PASSWORD_DOTS]Good2073761591websitehttps://app-eu3.planhat.com119841087720966> Last edited Wednesday, July 5, 2023 at 3:29:20 PM эrу:Userlukaslukaslukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas5,18 GB2,94 GB5,32 GB...
|
NULL
|
8803255152832433833
|
NULL
|
idle
|
ocr
|
NULL
|
SlackFileEditViewGoHistoryWindowHelpDOCKERO $1Sour SlackFileEditViewGoHistoryWindowHelpDOCKERO $1Source DB:NAS mount:Archive DB:Data dir:-zsh[+00m03s] • Counting sourceframes:elements:ul_events:ocr_text:meetings:[+00m03s] • Initialising tccreating tablescreating indexescreating FTS tabl[+00m04s] • Syncing data fcvideo_chunksframes (9093 rowsocr_text (5971 rcui_events (9970 гelements (687142meetings (2 rows)[+03m01s] • Updating FTS irelements_ftsframes_ftsui_events_fts[+06m41s] • Verifying DBframes:elements:ui_events:ocr_text:meetings:[+07m44s] *Copying data forsync 2026-04-20/2026-04-2110:48:54][2026-04-2110:48:54][2026-04-2110:48:54][2026-04-2110:48:54]ArchiTotalSync=====lukas@Lukas-Kovaliks-MacBodOKО $82(4.5G)-zsh• *3JiminnyProfileAll ItemsFavoritesWatchtower<› DeveloperVAULTSEmployeeEngineeringIntegration AccountsJiminnyV TAGS• 2FACSV Import 28.01.22LastPass Import 1.11.21C4udae Vit* Build full da...• *4screenpSearch in Jiminny2 results for "PLanhat"[EMAIL] log in ([EMAIL]> 0• Support Daily • in 3 h 10 m100% <78Tue 21 Apr 11:50:29Activity MonitorAll ProcessesCPUEnergyDiskNetworkProcess NameMem...ThreadsPortsPIDHelp+ New Item2269620752a Jiminny20765Employee vShareEdit40459858Planhat61937617472173623523usernamelukas.kovalik@jiminny.com2619861686password[PASSWORD_DOTS]Good2073761591websitehttps://app-eu3.planhat.com119841087720966> Last edited Wednesday, July 5, 2023 at 3:29:20 PM эrу:Userlukaslukaslukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas5,18 GB2,94 GB5,32 GB...
|
NULL
|
|
21675
|
476
|
39
|
2026-04-15T10:15:53.001901+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776248153001_m1.jpg...
|
Boosteroid
|
Boosteroid
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+Activity MonitorFileEditViewWindowHelpHomeDMsActi +Activity MonitorFileEditViewWindowHelpHomeDMsActivityFilesLater..•More+Search Jiminny IncJiminny ...= UnreadsThreadsHuddlesDrafts & sentDirectoriesExternal connections Starredplatform-inner-teamChannels# 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# releases8 22MessagesProject: app© Files+BookmarksWhan•Today ~12609:07:07Tag:View JobGitHub APP12:25 PM19 new commits pushed tomaster bymihailmihaylovjiminny07832f2e - JY-20479: Transcript downloadPDF optimizationadfb58d3 - JY-20479: Adjust table stylings3bcf892f - JY-20479: Adjust table stylingscaa07f29 - Merge branch 'master' into JY-20479-optimize-transcript-pdf-download55f628c0 - JY-20479: Adjust table stylingsShow more( jiminny/app Added by GitHubNelCircleCl APP12:51 PMDeployment Successful!Project: appWhen:04/15/202609:51:25Tag:View JobMessage #releases+Aa...Support Daily - in 1h 45 mRActivity MonitorAll ProcessesProcess NameBoosteroidWindowServerFirefoxCP Isolated Web ContentFirefoxFirefoxCursorUlViewService (Not Responding)FirefoxCP Isolated Web ContentFirefox GPU HelperVTDecoderXPCServiceFirefox GPU HelperFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentSlack Helper (Renderer)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentNotion Helper (Renderer)Notion Calendar Helper (Renderer)claudeFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentiTerm2Claude Helper (Renderer)FirefoxCP Isolated Web ContentClaudeFirefoxCP Isolated Web ContentMem...2,14 GB1,12 GB957,8 MB864,3 MB834,6 MB758,0 MB719,0 MB671,1 MB593,3 MB524,1 MB469,5 MB451,1 MB444,6 MB419,3 MB418,5 MB410,6 MB376,8 MB370,5 MB338,2 MB337,1 MB327,6 MB306,1 MB297,6 MB279,9 MB238,1 MB228,3 MB190,4 MB178,5 MBMEMORY PRESSUREPhysical Memory:Memory Used:Cached Files:Swap Used:100% C78Wed 15 Apr 13:15:52CPUMemoryDiskThreads39212574862530112725252426152726232115132428715265927EnergyPorts60419 0281237251 20419 285124244167254126121122123185125126121329172721201251 788209122720126PID74060407429748014146648424203080197406514673367133548035276358314186343652430164817311482654850910368983583348786051956138604914829816,00 GB13,58 GB <2,39 GB3,72 GBApp Memory:Wired Memory:Compressed:NetworkUserlukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas5,11 GB3,02 GB4,89 GB...
|
NULL
|
8802983593267725236
|
NULL
|
click
|
ocr
|
NULL
|
+Activity MonitorFileEditViewWindowHelpHomeDMsActi +Activity MonitorFileEditViewWindowHelpHomeDMsActivityFilesLater..•More+Search Jiminny IncJiminny ...= UnreadsThreadsHuddlesDrafts & sentDirectoriesExternal connections Starredplatform-inner-teamChannels# 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# releases8 22MessagesProject: app© Files+BookmarksWhan•Today ~12609:07:07Tag:View JobGitHub APP12:25 PM19 new commits pushed tomaster bymihailmihaylovjiminny07832f2e - JY-20479: Transcript downloadPDF optimizationadfb58d3 - JY-20479: Adjust table stylings3bcf892f - JY-20479: Adjust table stylingscaa07f29 - Merge branch 'master' into JY-20479-optimize-transcript-pdf-download55f628c0 - JY-20479: Adjust table stylingsShow more( jiminny/app Added by GitHubNelCircleCl APP12:51 PMDeployment Successful!Project: appWhen:04/15/202609:51:25Tag:View JobMessage #releases+Aa...Support Daily - in 1h 45 mRActivity MonitorAll ProcessesProcess NameBoosteroidWindowServerFirefoxCP Isolated Web ContentFirefoxFirefoxCursorUlViewService (Not Responding)FirefoxCP Isolated Web ContentFirefox GPU HelperVTDecoderXPCServiceFirefox GPU HelperFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentSlack Helper (Renderer)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentNotion Helper (Renderer)Notion Calendar Helper (Renderer)claudeFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentiTerm2Claude Helper (Renderer)FirefoxCP Isolated Web ContentClaudeFirefoxCP Isolated Web ContentMem...2,14 GB1,12 GB957,8 MB864,3 MB834,6 MB758,0 MB719,0 MB671,1 MB593,3 MB524,1 MB469,5 MB451,1 MB444,6 MB419,3 MB418,5 MB410,6 MB376,8 MB370,5 MB338,2 MB337,1 MB327,6 MB306,1 MB297,6 MB279,9 MB238,1 MB228,3 MB190,4 MB178,5 MBMEMORY PRESSUREPhysical Memory:Memory Used:Cached Files:Swap Used:100% C78Wed 15 Apr 13:15:52CPUMemoryDiskThreads39212574862530112725252426152726232115132428715265927EnergyPorts60419 0281237251 20419 285124244167254126121122123185125126121329172721201251 788209122720126PID74060407429748014146648424203080197406514673367133548035276358314186343652430164817311482654850910368983583348786051956138604914829816,00 GB13,58 GB <2,39 GB3,72 GBApp Memory:Wired Memory:Compressed:NetworkUserlukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas5,11 GB3,02 GB4,89 GB...
|
NULL
|
|
76679
|
1924
|
10
|
2026-04-24T08:16:59.845921+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777018619845_m2.jpg...
|
PhpStorm
|
faVsco.js – TrackAutomatedReportGeneratedEvent.php
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20738-debug-AJ-trackin Project: faVsco.js, menu
JY-20738-debug-AJ-tracking-UP, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
+++
<?php
declare(strict_types=1);
namespace Tests\Unit\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Listeners\AutomatedReports\UserPilot\TrackAutomatedReportGeneratedEvent;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use PHPUnit\Framework\MockObject\MockObject;
use Tests\TestCase;
class TrackAutomatedReportGeneratedEventTest extends TestCase
{
private UserPilotClient&MockObject $userPilotClient;
private AutomatedReportsService&MockObject $automatedReportsService;
protected function setUp(): void
{
parent::setUp();
$this->userPilotClient = $this->createMock(UserPilotClient::class);
$this->automatedReportsService = $this->createMock(AutomatedReportsService::class);
}
private function makeListener(): TrackAutomatedReportGeneratedEvent
{
return new TrackAutomatedReportGeneratedEvent(
$this->userPilotClient,
$this->automatedReportsService,
);
}
private function makeEvent(AutomatedReport $report): AutomatedReportGenerated
{
return new AutomatedReportGenerated($report);
}
public function testHandleSkipsWhenUserPilotTokenIsNull(): void
{
config(['services.userpilot.token' => null]);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->never())->method('isAskJiminnyReport');
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksCreatorForAskJiminnyReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn($creator);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(123);
$this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$creator,
'ask-jiminny-report-generated',
['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn(null);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(456);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksAllRecipientsForExecReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$userOne = $this->createMock(User::class);
$userTwo = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(789);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$userOne, $userTwo]);
$this->userPilotClient->expects($this->exactly(2))
->method('track')
->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {
$this->assertTrue($user === $userOne || $user === $userTwo);
$this->assertSame('automated-report-generated', $eventName);
$this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);
return null;
});
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(101);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->willReturn([]);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotThrowOnGuzzleException(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->method('isAskJiminnyReport')->willReturn(true);
$report->method('getCreator')->willReturn($creator);
$report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->method('getFrequency')->willReturn('daily');
$report->method('getId')->willReturn(202);
$guzzleException = $this->createMock(GuzzleException::class);
$this->userPilotClient->expects($this->once())
->method('track')
->with($creator, 'ask-jiminny-report-generated', $this->anything())
->willThrowException($guzzleException);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
$this->addToAssertionCount(1);
}
public function testHandleTracksAutomatedReportWithSingleRecipient(): void
{
config(['services.userpilot.token' => 'NX-token']);
$user = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('team_performance');
$report->expects($this->once())->method('getFrequency')->willReturn('daily');
$report->expects($this->once())->method('getId')->willReturn(303);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$user]);
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$user,
'automated-report-generated',
['report_type' => 'team_performance', 'frequency' => 'daily']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($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,"bounds":{"left":0.25731382,"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":"JY-20738-debug-AJ-tracking-UP, menu","depth":5,"bounds":{"left":0.29587767,"top":0.019952115,"width":0.08510638,"height":0.025538707},"help_text":"Git Branch: JY-20738-debug-AJ-tracking-UP","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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.6200133,"top":0.2490024,"width":0.00731383,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.6293218,"top":0.2490024,"width":0.00731383,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.63863033,"top":0.2490024,"width":0.00731383,"height":0.015163607},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6476064,"top":0.24740623,"width":0.00731383,"height":0.018355945},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.6549202,"top":0.24740623,"width":0.006981383,"height":0.018355945},"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\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"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":"AXStaticText","text":"43","depth":4,"bounds":{"left":0.96210104,"top":0.10055866,"width":0.010305851,"height":0.015163607},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.09896249,"width":0.00731383,"height":0.018355945},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.09896249,"width":0.006981383,"height":0.018355945},"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\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}\n\n+++\n\n<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Listeners\\AutomatedReports\\UserPilot\\TrackAutomatedReportGeneratedEvent;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse Tests\\TestCase;\n\nclass TrackAutomatedReportGeneratedEventTest extends TestCase\n{\n private UserPilotClient&MockObject $userPilotClient;\n private AutomatedReportsService&MockObject $automatedReportsService;\n\n protected function setUp(): void\n {\n parent::setUp();\n $this->userPilotClient = $this->createMock(UserPilotClient::class);\n $this->automatedReportsService = $this->createMock(AutomatedReportsService::class);\n }\n\n private function makeListener(): TrackAutomatedReportGeneratedEvent\n {\n return new TrackAutomatedReportGeneratedEvent(\n $this->userPilotClient,\n $this->automatedReportsService,\n );\n }\n\n private function makeEvent(AutomatedReport $report): AutomatedReportGenerated\n {\n return new AutomatedReportGenerated($report);\n }\n\n public function testHandleSkipsWhenUserPilotTokenIsNull(): void\n {\n config(['services.userpilot.token' => null]);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->never())->method('isAskJiminnyReport');\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksCreatorForAskJiminnyReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn($creator);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(123);\n\n $this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $creator,\n 'ask-jiminny-report-generated',\n ['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn(null);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(456);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksAllRecipientsForExecReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $userOne = $this->createMock(User::class);\n $userTwo = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(789);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$userOne, $userTwo]);\n\n $this->userPilotClient->expects($this->exactly(2))\n ->method('track')\n ->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {\n $this->assertTrue($user === $userOne || $user === $userTwo);\n $this->assertSame('automated-report-generated', $eventName);\n $this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);\n\n return null;\n });\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(101);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->willReturn([]);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotThrowOnGuzzleException(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->method('isAskJiminnyReport')->willReturn(true);\n $report->method('getCreator')->willReturn($creator);\n $report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->method('getFrequency')->willReturn('daily');\n $report->method('getId')->willReturn(202);\n\n $guzzleException = $this->createMock(GuzzleException::class);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with($creator, 'ask-jiminny-report-generated', $this->anything())\n ->willThrowException($guzzleException);\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n\n $this->addToAssertionCount(1);\n }\n\n public function testHandleTracksAutomatedReportWithSingleRecipient(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $user = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('team_performance');\n $report->expects($this->once())->method('getFrequency')->willReturn('daily');\n $report->expects($this->once())->method('getId')->willReturn(303);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$user]);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $user,\n 'automated-report-generated',\n ['report_type' => 'team_performance', 'frequency' => 'daily']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}\n\n+++\n\n<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Listeners\\AutomatedReports\\UserPilot\\TrackAutomatedReportGeneratedEvent;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse Tests\\TestCase;\n\nclass TrackAutomatedReportGeneratedEventTest extends TestCase\n{\n private UserPilotClient&MockObject $userPilotClient;\n private AutomatedReportsService&MockObject $automatedReportsService;\n\n protected function setUp(): void\n {\n parent::setUp();\n $this->userPilotClient = $this->createMock(UserPilotClient::class);\n $this->automatedReportsService = $this->createMock(AutomatedReportsService::class);\n }\n\n private function makeListener(): TrackAutomatedReportGeneratedEvent\n {\n return new TrackAutomatedReportGeneratedEvent(\n $this->userPilotClient,\n $this->automatedReportsService,\n );\n }\n\n private function makeEvent(AutomatedReport $report): AutomatedReportGenerated\n {\n return new AutomatedReportGenerated($report);\n }\n\n public function testHandleSkipsWhenUserPilotTokenIsNull(): void\n {\n config(['services.userpilot.token' => null]);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->never())->method('isAskJiminnyReport');\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksCreatorForAskJiminnyReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn($creator);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(123);\n\n $this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $creator,\n 'ask-jiminny-report-generated',\n ['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn(null);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(456);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksAllRecipientsForExecReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $userOne = $this->createMock(User::class);\n $userTwo = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(789);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$userOne, $userTwo]);\n\n $this->userPilotClient->expects($this->exactly(2))\n ->method('track')\n ->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {\n $this->assertTrue($user === $userOne || $user === $userTwo);\n $this->assertSame('automated-report-generated', $eventName);\n $this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);\n\n return null;\n });\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(101);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->willReturn([]);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotThrowOnGuzzleException(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->method('isAskJiminnyReport')->willReturn(true);\n $report->method('getCreator')->willReturn($creator);\n $report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->method('getFrequency')->willReturn('daily');\n $report->method('getId')->willReturn(202);\n\n $guzzleException = $this->createMock(GuzzleException::class);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with($creator, 'ask-jiminny-report-generated', $this->anything())\n ->willThrowException($guzzleException);\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n\n $this->addToAssertionCount(1);\n }\n\n public function testHandleTracksAutomatedReportWithSingleRecipient(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $user = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('team_performance');\n $report->expects($this->once())->method('getFrequency')->willReturn('daily');\n $report->expects($this->once())->method('getId')->willReturn(303);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$user]);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $user,\n 'automated-report-generated',\n ['report_type' => 'team_performance', 'frequency' => 'daily']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\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,"bounds":{"left":0.24335106,"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}]...
|
8802872861699676927
|
-814333409992410365
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20738-debug-AJ-trackin Project: faVsco.js, menu
JY-20738-debug-AJ-tracking-UP, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
+++
<?php
declare(strict_types=1);
namespace Tests\Unit\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Listeners\AutomatedReports\UserPilot\TrackAutomatedReportGeneratedEvent;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use PHPUnit\Framework\MockObject\MockObject;
use Tests\TestCase;
class TrackAutomatedReportGeneratedEventTest extends TestCase
{
private UserPilotClient&MockObject $userPilotClient;
private AutomatedReportsService&MockObject $automatedReportsService;
protected function setUp(): void
{
parent::setUp();
$this->userPilotClient = $this->createMock(UserPilotClient::class);
$this->automatedReportsService = $this->createMock(AutomatedReportsService::class);
}
private function makeListener(): TrackAutomatedReportGeneratedEvent
{
return new TrackAutomatedReportGeneratedEvent(
$this->userPilotClient,
$this->automatedReportsService,
);
}
private function makeEvent(AutomatedReport $report): AutomatedReportGenerated
{
return new AutomatedReportGenerated($report);
}
public function testHandleSkipsWhenUserPilotTokenIsNull(): void
{
config(['services.userpilot.token' => null]);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->never())->method('isAskJiminnyReport');
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksCreatorForAskJiminnyReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn($creator);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(123);
$this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$creator,
'ask-jiminny-report-generated',
['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn(null);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(456);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksAllRecipientsForExecReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$userOne = $this->createMock(User::class);
$userTwo = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(789);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$userOne, $userTwo]);
$this->userPilotClient->expects($this->exactly(2))
->method('track')
->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {
$this->assertTrue($user === $userOne || $user === $userTwo);
$this->assertSame('automated-report-generated', $eventName);
$this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);
return null;
});
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(101);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->willReturn([]);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotThrowOnGuzzleException(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->method('isAskJiminnyReport')->willReturn(true);
$report->method('getCreator')->willReturn($creator);
$report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->method('getFrequency')->willReturn('daily');
$report->method('getId')->willReturn(202);
$guzzleException = $this->createMock(GuzzleException::class);
$this->userPilotClient->expects($this->once())
->method('track')
->with($creator, 'ask-jiminny-report-generated', $this->anything())
->willThrowException($guzzleException);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
$this->addToAssertionCount(1);
}
public function testHandleTracksAutomatedReportWithSingleRecipient(): void
{
config(['services.userpilot.token' => 'NX-token']);
$user = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('team_performance');
$report->expects($this->once())->method('getFrequency')->willReturn('daily');
$report->expects($this->once())->method('getId')->willReturn(303);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$user]);
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$user,
'automated-report-generated',
['report_type' => 'team_performance', 'frequency' => 'daily']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
|
76680
|
1923
|
12
|
2026-04-24T08:16:59.987888+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777018619987_m1.jpg...
|
PhpStorm
|
faVsco.js – TrackAutomatedReportGeneratedEvent.php
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20738-debug-AJ-trackin Project: faVsco.js, menu
JY-20738-debug-AJ-tracking-UP, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
+++
<?php
declare(strict_types=1);
namespace Tests\Unit\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Listeners\AutomatedReports\UserPilot\TrackAutomatedReportGeneratedEvent;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use PHPUnit\Framework\MockObject\MockObject;
use Tests\TestCase;
class TrackAutomatedReportGeneratedEventTest extends TestCase
{
private UserPilotClient&MockObject $userPilotClient;
private AutomatedReportsService&MockObject $automatedReportsService;
protected function setUp(): void
{
parent::setUp();
$this->userPilotClient = $this->createMock(UserPilotClient::class);
$this->automatedReportsService = $this->createMock(AutomatedReportsService::class);
}
private function makeListener(): TrackAutomatedReportGeneratedEvent
{
return new TrackAutomatedReportGeneratedEvent(
$this->userPilotClient,
$this->automatedReportsService,
);
}
private function makeEvent(AutomatedReport $report): AutomatedReportGenerated
{
return new AutomatedReportGenerated($report);
}
public function testHandleSkipsWhenUserPilotTokenIsNull(): void
{
config(['services.userpilot.token' => null]);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->never())->method('isAskJiminnyReport');
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksCreatorForAskJiminnyReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn($creator);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(123);
$this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$creator,
'ask-jiminny-report-generated',
['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn(null);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(456);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksAllRecipientsForExecReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$userOne = $this->createMock(User::class);
$userTwo = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(789);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$userOne, $userTwo]);
$this->userPilotClient->expects($this->exactly(2))
->method('track')
->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {
$this->assertTrue($user === $userOne || $user === $userTwo);
$this->assertSame('automated-report-generated', $eventName);
$this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);
return null;
});
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(101);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->willReturn([]);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotThrowOnGuzzleException(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->method('isAskJiminnyReport')->willReturn(true);
$report->method('getCreator')->willReturn($creator);
$report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->method('getFrequency')->willReturn('daily');
$report->method('getId')->willReturn(202);
$guzzleException = $this->createMock(GuzzleException::class);
$this->userPilotClient->expects($this->once())
->method('track')
->with($creator, 'ask-jiminny-report-generated', $this->anything())
->willThrowException($guzzleException);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
$this->addToAssertionCount(1);
}
public function testHandleTracksAutomatedReportWithSingleRecipient(): void
{
config(['services.userpilot.token' => 'NX-token']);
$user = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('team_performance');
$report->expects($this->once())->method('getFrequency')->willReturn('daily');
$report->expects($this->once())->method('getId')->willReturn(303);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$user]);
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$user,
'automated-report-generated',
['report_type' => 'team_performance', 'frequency' => 'daily']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($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":"JY-20738-debug-AJ-tracking-UP, menu","depth":5,"help_text":"Git Branch: JY-20738-debug-AJ-tracking-UP","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":"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":"1","depth":4,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"role_description":"text"},{"role":"AXStaticText","text":"1","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\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"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":"43","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\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}\n\n+++\n\n<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Listeners\\AutomatedReports\\UserPilot\\TrackAutomatedReportGeneratedEvent;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse Tests\\TestCase;\n\nclass TrackAutomatedReportGeneratedEventTest extends TestCase\n{\n private UserPilotClient&MockObject $userPilotClient;\n private AutomatedReportsService&MockObject $automatedReportsService;\n\n protected function setUp(): void\n {\n parent::setUp();\n $this->userPilotClient = $this->createMock(UserPilotClient::class);\n $this->automatedReportsService = $this->createMock(AutomatedReportsService::class);\n }\n\n private function makeListener(): TrackAutomatedReportGeneratedEvent\n {\n return new TrackAutomatedReportGeneratedEvent(\n $this->userPilotClient,\n $this->automatedReportsService,\n );\n }\n\n private function makeEvent(AutomatedReport $report): AutomatedReportGenerated\n {\n return new AutomatedReportGenerated($report);\n }\n\n public function testHandleSkipsWhenUserPilotTokenIsNull(): void\n {\n config(['services.userpilot.token' => null]);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->never())->method('isAskJiminnyReport');\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksCreatorForAskJiminnyReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn($creator);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(123);\n\n $this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $creator,\n 'ask-jiminny-report-generated',\n ['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn(null);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(456);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksAllRecipientsForExecReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $userOne = $this->createMock(User::class);\n $userTwo = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(789);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$userOne, $userTwo]);\n\n $this->userPilotClient->expects($this->exactly(2))\n ->method('track')\n ->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {\n $this->assertTrue($user === $userOne || $user === $userTwo);\n $this->assertSame('automated-report-generated', $eventName);\n $this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);\n\n return null;\n });\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(101);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->willReturn([]);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotThrowOnGuzzleException(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->method('isAskJiminnyReport')->willReturn(true);\n $report->method('getCreator')->willReturn($creator);\n $report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->method('getFrequency')->willReturn('daily');\n $report->method('getId')->willReturn(202);\n\n $guzzleException = $this->createMock(GuzzleException::class);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with($creator, 'ask-jiminny-report-generated', $this->anything())\n ->willThrowException($guzzleException);\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n\n $this->addToAssertionCount(1);\n }\n\n public function testHandleTracksAutomatedReportWithSingleRecipient(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $user = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('team_performance');\n $report->expects($this->once())->method('getFrequency')->willReturn('daily');\n $report->expects($this->once())->method('getId')->willReturn(303);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$user]);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $user,\n 'automated-report-generated',\n ['report_type' => 'team_performance', 'frequency' => 'daily']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}\n\n+++\n\n<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Listeners\\AutomatedReports\\UserPilot\\TrackAutomatedReportGeneratedEvent;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse Tests\\TestCase;\n\nclass TrackAutomatedReportGeneratedEventTest extends TestCase\n{\n private UserPilotClient&MockObject $userPilotClient;\n private AutomatedReportsService&MockObject $automatedReportsService;\n\n protected function setUp(): void\n {\n parent::setUp();\n $this->userPilotClient = $this->createMock(UserPilotClient::class);\n $this->automatedReportsService = $this->createMock(AutomatedReportsService::class);\n }\n\n private function makeListener(): TrackAutomatedReportGeneratedEvent\n {\n return new TrackAutomatedReportGeneratedEvent(\n $this->userPilotClient,\n $this->automatedReportsService,\n );\n }\n\n private function makeEvent(AutomatedReport $report): AutomatedReportGenerated\n {\n return new AutomatedReportGenerated($report);\n }\n\n public function testHandleSkipsWhenUserPilotTokenIsNull(): void\n {\n config(['services.userpilot.token' => null]);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->never())->method('isAskJiminnyReport');\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksCreatorForAskJiminnyReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn($creator);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(123);\n\n $this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $creator,\n 'ask-jiminny-report-generated',\n ['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn(null);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(456);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksAllRecipientsForExecReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $userOne = $this->createMock(User::class);\n $userTwo = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(789);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$userOne, $userTwo]);\n\n $this->userPilotClient->expects($this->exactly(2))\n ->method('track')\n ->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {\n $this->assertTrue($user === $userOne || $user === $userTwo);\n $this->assertSame('automated-report-generated', $eventName);\n $this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);\n\n return null;\n });\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(101);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->willReturn([]);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotThrowOnGuzzleException(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->method('isAskJiminnyReport')->willReturn(true);\n $report->method('getCreator')->willReturn($creator);\n $report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->method('getFrequency')->willReturn('daily');\n $report->method('getId')->willReturn(202);\n\n $guzzleException = $this->createMock(GuzzleException::class);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with($creator, 'ask-jiminny-report-generated', $this->anything())\n ->willThrowException($guzzleException);\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n\n $this->addToAssertionCount(1);\n }\n\n public function testHandleTracksAutomatedReportWithSingleRecipient(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $user = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('team_performance');\n $report->expects($this->once())->method('getFrequency')->willReturn('daily');\n $report->expects($this->once())->method('getId')->willReturn(303);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$user]);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $user,\n 'automated-report-generated',\n ['report_type' => 'team_performance', 'frequency' => 'daily']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\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}]...
|
8802872861699676927
|
-814333409992410365
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20738-debug-AJ-trackin Project: faVsco.js, menu
JY-20738-debug-AJ-tracking-UP, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
+++
<?php
declare(strict_types=1);
namespace Tests\Unit\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Listeners\AutomatedReports\UserPilot\TrackAutomatedReportGeneratedEvent;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use PHPUnit\Framework\MockObject\MockObject;
use Tests\TestCase;
class TrackAutomatedReportGeneratedEventTest extends TestCase
{
private UserPilotClient&MockObject $userPilotClient;
private AutomatedReportsService&MockObject $automatedReportsService;
protected function setUp(): void
{
parent::setUp();
$this->userPilotClient = $this->createMock(UserPilotClient::class);
$this->automatedReportsService = $this->createMock(AutomatedReportsService::class);
}
private function makeListener(): TrackAutomatedReportGeneratedEvent
{
return new TrackAutomatedReportGeneratedEvent(
$this->userPilotClient,
$this->automatedReportsService,
);
}
private function makeEvent(AutomatedReport $report): AutomatedReportGenerated
{
return new AutomatedReportGenerated($report);
}
public function testHandleSkipsWhenUserPilotTokenIsNull(): void
{
config(['services.userpilot.token' => null]);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->never())->method('isAskJiminnyReport');
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksCreatorForAskJiminnyReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn($creator);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(123);
$this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$creator,
'ask-jiminny-report-generated',
['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn(null);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(456);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksAllRecipientsForExecReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$userOne = $this->createMock(User::class);
$userTwo = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(789);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$userOne, $userTwo]);
$this->userPilotClient->expects($this->exactly(2))
->method('track')
->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {
$this->assertTrue($user === $userOne || $user === $userTwo);
$this->assertSame('automated-report-generated', $eventName);
$this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);
return null;
});
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(101);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->willReturn([]);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotThrowOnGuzzleException(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->method('isAskJiminnyReport')->willReturn(true);
$report->method('getCreator')->willReturn($creator);
$report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->method('getFrequency')->willReturn('daily');
$report->method('getId')->willReturn(202);
$guzzleException = $this->createMock(GuzzleException::class);
$this->userPilotClient->expects($this->once())
->method('track')
->with($creator, 'ask-jiminny-report-generated', $this->anything())
->willThrowException($guzzleException);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
$this->addToAssertionCount(1);
}
public function testHandleTracksAutomatedReportWithSingleRecipient(): void
{
config(['services.userpilot.token' => 'NX-token']);
$user = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('team_performance');
$report->expects($this->once())->method('getFrequency')->willReturn('daily');
$report->expects($this->once())->method('getId')->willReturn(303);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$user]);
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$user,
'automated-report-generated',
['report_type' => 'team_performance', 'frequency' => 'daily']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
|
76681
|
1923
|
13
|
2026-04-24T08:17:01.445821+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777018621445_m1.jpg...
|
PhpStorm
|
faVsco.js – TrackAutomatedReportGeneratedEvent.php
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20738-debug-AJ-trackin Project: faVsco.js, menu
JY-20738-debug-AJ-tracking-UP, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
+++
<?php
declare(strict_types=1);
namespace Tests\Unit\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Listeners\AutomatedReports\UserPilot\TrackAutomatedReportGeneratedEvent;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use PHPUnit\Framework\MockObject\MockObject;
use Tests\TestCase;
class TrackAutomatedReportGeneratedEventTest extends TestCase
{
private UserPilotClient&MockObject $userPilotClient;
private AutomatedReportsService&MockObject $automatedReportsService;
protected function setUp(): void
{
parent::setUp();
$this->userPilotClient = $this->createMock(UserPilotClient::class);
$this->automatedReportsService = $this->createMock(AutomatedReportsService::class);
}
private function makeListener(): TrackAutomatedReportGeneratedEvent
{
return new TrackAutomatedReportGeneratedEvent(
$this->userPilotClient,
$this->automatedReportsService,
);
}
private function makeEvent(AutomatedReport $report): AutomatedReportGenerated
{
return new AutomatedReportGenerated($report);
}
public function testHandleSkipsWhenUserPilotTokenIsNull(): void
{
config(['services.userpilot.token' => null]);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->never())->method('isAskJiminnyReport');
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksCreatorForAskJiminnyReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn($creator);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(123);
$this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$creator,
'ask-jiminny-report-generated',
['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn(null);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(456);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksAllRecipientsForExecReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$userOne = $this->createMock(User::class);
$userTwo = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(789);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$userOne, $userTwo]);
$this->userPilotClient->expects($this->exactly(2))
->method('track')
->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {
$this->assertTrue($user === $userOne || $user === $userTwo);
$this->assertSame('automated-report-generated', $eventName);
$this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);
return null;
});
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(101);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->willReturn([]);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotThrowOnGuzzleException(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->method('isAskJiminnyReport')->willReturn(true);
$report->method('getCreator')->willReturn($creator);
$report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->method('getFrequency')->willReturn('daily');
$report->method('getId')->willReturn(202);
$guzzleException = $this->createMock(GuzzleException::class);
$this->userPilotClient->expects($this->once())
->method('track')
->with($creator, 'ask-jiminny-report-generated', $this->anything())
->willThrowException($guzzleException);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
$this->addToAssertionCount(1);
}
public function testHandleTracksAutomatedReportWithSingleRecipient(): void
{
config(['services.userpilot.token' => 'NX-token']);
$user = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('team_performance');
$report->expects($this->once())->method('getFrequency')->willReturn('daily');
$report->expects($this->once())->method('getId')->willReturn(303);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$user]);
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$user,
'automated-report-generated',
['report_type' => 'team_performance', 'frequency' => 'daily']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($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":"JY-20738-debug-AJ-tracking-UP, menu","depth":5,"help_text":"Git Branch: JY-20738-debug-AJ-tracking-UP","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":"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":"1","depth":4,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"role_description":"text"},{"role":"AXStaticText","text":"1","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\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"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":"43","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\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}\n\n+++\n\n<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Listeners\\AutomatedReports\\UserPilot\\TrackAutomatedReportGeneratedEvent;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse Tests\\TestCase;\n\nclass TrackAutomatedReportGeneratedEventTest extends TestCase\n{\n private UserPilotClient&MockObject $userPilotClient;\n private AutomatedReportsService&MockObject $automatedReportsService;\n\n protected function setUp(): void\n {\n parent::setUp();\n $this->userPilotClient = $this->createMock(UserPilotClient::class);\n $this->automatedReportsService = $this->createMock(AutomatedReportsService::class);\n }\n\n private function makeListener(): TrackAutomatedReportGeneratedEvent\n {\n return new TrackAutomatedReportGeneratedEvent(\n $this->userPilotClient,\n $this->automatedReportsService,\n );\n }\n\n private function makeEvent(AutomatedReport $report): AutomatedReportGenerated\n {\n return new AutomatedReportGenerated($report);\n }\n\n public function testHandleSkipsWhenUserPilotTokenIsNull(): void\n {\n config(['services.userpilot.token' => null]);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->never())->method('isAskJiminnyReport');\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksCreatorForAskJiminnyReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn($creator);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(123);\n\n $this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $creator,\n 'ask-jiminny-report-generated',\n ['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn(null);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(456);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksAllRecipientsForExecReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $userOne = $this->createMock(User::class);\n $userTwo = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(789);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$userOne, $userTwo]);\n\n $this->userPilotClient->expects($this->exactly(2))\n ->method('track')\n ->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {\n $this->assertTrue($user === $userOne || $user === $userTwo);\n $this->assertSame('automated-report-generated', $eventName);\n $this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);\n\n return null;\n });\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(101);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->willReturn([]);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotThrowOnGuzzleException(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->method('isAskJiminnyReport')->willReturn(true);\n $report->method('getCreator')->willReturn($creator);\n $report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->method('getFrequency')->willReturn('daily');\n $report->method('getId')->willReturn(202);\n\n $guzzleException = $this->createMock(GuzzleException::class);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with($creator, 'ask-jiminny-report-generated', $this->anything())\n ->willThrowException($guzzleException);\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n\n $this->addToAssertionCount(1);\n }\n\n public function testHandleTracksAutomatedReportWithSingleRecipient(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $user = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('team_performance');\n $report->expects($this->once())->method('getFrequency')->willReturn('daily');\n $report->expects($this->once())->method('getId')->willReturn(303);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$user]);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $user,\n 'automated-report-generated',\n ['report_type' => 'team_performance', 'frequency' => 'daily']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}\n\n+++\n\n<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Listeners\\AutomatedReports\\UserPilot\\TrackAutomatedReportGeneratedEvent;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse Tests\\TestCase;\n\nclass TrackAutomatedReportGeneratedEventTest extends TestCase\n{\n private UserPilotClient&MockObject $userPilotClient;\n private AutomatedReportsService&MockObject $automatedReportsService;\n\n protected function setUp(): void\n {\n parent::setUp();\n $this->userPilotClient = $this->createMock(UserPilotClient::class);\n $this->automatedReportsService = $this->createMock(AutomatedReportsService::class);\n }\n\n private function makeListener(): TrackAutomatedReportGeneratedEvent\n {\n return new TrackAutomatedReportGeneratedEvent(\n $this->userPilotClient,\n $this->automatedReportsService,\n );\n }\n\n private function makeEvent(AutomatedReport $report): AutomatedReportGenerated\n {\n return new AutomatedReportGenerated($report);\n }\n\n public function testHandleSkipsWhenUserPilotTokenIsNull(): void\n {\n config(['services.userpilot.token' => null]);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->never())->method('isAskJiminnyReport');\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksCreatorForAskJiminnyReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn($creator);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(123);\n\n $this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $creator,\n 'ask-jiminny-report-generated',\n ['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn(null);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(456);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksAllRecipientsForExecReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $userOne = $this->createMock(User::class);\n $userTwo = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(789);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$userOne, $userTwo]);\n\n $this->userPilotClient->expects($this->exactly(2))\n ->method('track')\n ->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {\n $this->assertTrue($user === $userOne || $user === $userTwo);\n $this->assertSame('automated-report-generated', $eventName);\n $this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);\n\n return null;\n });\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(101);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->willReturn([]);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotThrowOnGuzzleException(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->method('isAskJiminnyReport')->willReturn(true);\n $report->method('getCreator')->willReturn($creator);\n $report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->method('getFrequency')->willReturn('daily');\n $report->method('getId')->willReturn(202);\n\n $guzzleException = $this->createMock(GuzzleException::class);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with($creator, 'ask-jiminny-report-generated', $this->anything())\n ->willThrowException($guzzleException);\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n\n $this->addToAssertionCount(1);\n }\n\n public function testHandleTracksAutomatedReportWithSingleRecipient(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $user = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('team_performance');\n $report->expects($this->once())->method('getFrequency')->willReturn('daily');\n $report->expects($this->once())->method('getId')->willReturn(303);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$user]);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $user,\n 'automated-report-generated',\n ['report_type' => 'team_performance', 'frequency' => 'daily']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\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}]...
|
8802872861699676927
|
-814333409992410365
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20738-debug-AJ-trackin Project: faVsco.js, menu
JY-20738-debug-AJ-tracking-UP, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
+++
<?php
declare(strict_types=1);
namespace Tests\Unit\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Listeners\AutomatedReports\UserPilot\TrackAutomatedReportGeneratedEvent;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use PHPUnit\Framework\MockObject\MockObject;
use Tests\TestCase;
class TrackAutomatedReportGeneratedEventTest extends TestCase
{
private UserPilotClient&MockObject $userPilotClient;
private AutomatedReportsService&MockObject $automatedReportsService;
protected function setUp(): void
{
parent::setUp();
$this->userPilotClient = $this->createMock(UserPilotClient::class);
$this->automatedReportsService = $this->createMock(AutomatedReportsService::class);
}
private function makeListener(): TrackAutomatedReportGeneratedEvent
{
return new TrackAutomatedReportGeneratedEvent(
$this->userPilotClient,
$this->automatedReportsService,
);
}
private function makeEvent(AutomatedReport $report): AutomatedReportGenerated
{
return new AutomatedReportGenerated($report);
}
public function testHandleSkipsWhenUserPilotTokenIsNull(): void
{
config(['services.userpilot.token' => null]);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->never())->method('isAskJiminnyReport');
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksCreatorForAskJiminnyReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn($creator);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(123);
$this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$creator,
'ask-jiminny-report-generated',
['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn(null);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(456);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksAllRecipientsForExecReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$userOne = $this->createMock(User::class);
$userTwo = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(789);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$userOne, $userTwo]);
$this->userPilotClient->expects($this->exactly(2))
->method('track')
->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {
$this->assertTrue($user === $userOne || $user === $userTwo);
$this->assertSame('automated-report-generated', $eventName);
$this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);
return null;
});
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(101);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->willReturn([]);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotThrowOnGuzzleException(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->method('isAskJiminnyReport')->willReturn(true);
$report->method('getCreator')->willReturn($creator);
$report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->method('getFrequency')->willReturn('daily');
$report->method('getId')->willReturn(202);
$guzzleException = $this->createMock(GuzzleException::class);
$this->userPilotClient->expects($this->once())
->method('track')
->with($creator, 'ask-jiminny-report-generated', $this->anything())
->willThrowException($guzzleException);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
$this->addToAssertionCount(1);
}
public function testHandleTracksAutomatedReportWithSingleRecipient(): void
{
config(['services.userpilot.token' => 'NX-token']);
$user = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('team_performance');
$report->expects($this->once())->method('getFrequency')->willReturn('daily');
$report->expects($this->once())->method('getId')->willReturn(303);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$user]);
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$user,
'automated-report-generated',
['report_type' => 'team_performance', 'frequency' => 'daily']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
|
76682
|
1924
|
11
|
2026-04-24T08:17:01.588307+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777018621588_m2.jpg...
|
PhpStorm
|
faVsco.js – TrackAutomatedReportGeneratedEvent.php
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20738-debug-AJ-trackin Project: faVsco.js, menu
JY-20738-debug-AJ-tracking-UP, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
+++
<?php
declare(strict_types=1);
namespace Tests\Unit\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Listeners\AutomatedReports\UserPilot\TrackAutomatedReportGeneratedEvent;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use PHPUnit\Framework\MockObject\MockObject;
use Tests\TestCase;
class TrackAutomatedReportGeneratedEventTest extends TestCase
{
private UserPilotClient&MockObject $userPilotClient;
private AutomatedReportsService&MockObject $automatedReportsService;
protected function setUp(): void
{
parent::setUp();
$this->userPilotClient = $this->createMock(UserPilotClient::class);
$this->automatedReportsService = $this->createMock(AutomatedReportsService::class);
}
private function makeListener(): TrackAutomatedReportGeneratedEvent
{
return new TrackAutomatedReportGeneratedEvent(
$this->userPilotClient,
$this->automatedReportsService,
);
}
private function makeEvent(AutomatedReport $report): AutomatedReportGenerated
{
return new AutomatedReportGenerated($report);
}
public function testHandleSkipsWhenUserPilotTokenIsNull(): void
{
config(['services.userpilot.token' => null]);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->never())->method('isAskJiminnyReport');
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksCreatorForAskJiminnyReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn($creator);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(123);
$this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$creator,
'ask-jiminny-report-generated',
['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn(null);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(456);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksAllRecipientsForExecReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$userOne = $this->createMock(User::class);
$userTwo = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(789);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$userOne, $userTwo]);
$this->userPilotClient->expects($this->exactly(2))
->method('track')
->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {
$this->assertTrue($user === $userOne || $user === $userTwo);
$this->assertSame('automated-report-generated', $eventName);
$this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);
return null;
});
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(101);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->willReturn([]);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotThrowOnGuzzleException(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->method('isAskJiminnyReport')->willReturn(true);
$report->method('getCreator')->willReturn($creator);
$report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->method('getFrequency')->willReturn('daily');
$report->method('getId')->willReturn(202);
$guzzleException = $this->createMock(GuzzleException::class);
$this->userPilotClient->expects($this->once())
->method('track')
->with($creator, 'ask-jiminny-report-generated', $this->anything())
->willThrowException($guzzleException);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
$this->addToAssertionCount(1);
}
public function testHandleTracksAutomatedReportWithSingleRecipient(): void
{
config(['services.userpilot.token' => 'NX-token']);
$user = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('team_performance');
$report->expects($this->once())->method('getFrequency')->willReturn('daily');
$report->expects($this->once())->method('getId')->willReturn(303);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$user]);
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$user,
'automated-report-generated',
['report_type' => 'team_performance', 'frequency' => 'daily']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($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,"bounds":{"left":0.25731382,"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":"JY-20738-debug-AJ-tracking-UP, menu","depth":5,"bounds":{"left":0.29587767,"top":0.019952115,"width":0.08510638,"height":0.025538707},"help_text":"Git Branch: JY-20738-debug-AJ-tracking-UP","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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.6200133,"top":0.22426178,"width":0.00731383,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.6293218,"top":0.22426178,"width":0.00731383,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.63863033,"top":0.22426178,"width":0.00731383,"height":0.015163607},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6476064,"top":0.22266561,"width":0.00731383,"height":0.018355945},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.6549202,"top":0.22266561,"width":0.006981383,"height":0.018355945},"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\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"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":"AXStaticText","text":"43","depth":4,"bounds":{"left":0.96210104,"top":0.10055866,"width":0.010305851,"height":0.015163607},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.09896249,"width":0.00731383,"height":0.018355945},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.09896249,"width":0.006981383,"height":0.018355945},"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\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}\n\n+++\n\n<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Listeners\\AutomatedReports\\UserPilot\\TrackAutomatedReportGeneratedEvent;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse Tests\\TestCase;\n\nclass TrackAutomatedReportGeneratedEventTest extends TestCase\n{\n private UserPilotClient&MockObject $userPilotClient;\n private AutomatedReportsService&MockObject $automatedReportsService;\n\n protected function setUp(): void\n {\n parent::setUp();\n $this->userPilotClient = $this->createMock(UserPilotClient::class);\n $this->automatedReportsService = $this->createMock(AutomatedReportsService::class);\n }\n\n private function makeListener(): TrackAutomatedReportGeneratedEvent\n {\n return new TrackAutomatedReportGeneratedEvent(\n $this->userPilotClient,\n $this->automatedReportsService,\n );\n }\n\n private function makeEvent(AutomatedReport $report): AutomatedReportGenerated\n {\n return new AutomatedReportGenerated($report);\n }\n\n public function testHandleSkipsWhenUserPilotTokenIsNull(): void\n {\n config(['services.userpilot.token' => null]);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->never())->method('isAskJiminnyReport');\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksCreatorForAskJiminnyReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn($creator);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(123);\n\n $this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $creator,\n 'ask-jiminny-report-generated',\n ['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn(null);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(456);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksAllRecipientsForExecReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $userOne = $this->createMock(User::class);\n $userTwo = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(789);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$userOne, $userTwo]);\n\n $this->userPilotClient->expects($this->exactly(2))\n ->method('track')\n ->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {\n $this->assertTrue($user === $userOne || $user === $userTwo);\n $this->assertSame('automated-report-generated', $eventName);\n $this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);\n\n return null;\n });\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(101);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->willReturn([]);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotThrowOnGuzzleException(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->method('isAskJiminnyReport')->willReturn(true);\n $report->method('getCreator')->willReturn($creator);\n $report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->method('getFrequency')->willReturn('daily');\n $report->method('getId')->willReturn(202);\n\n $guzzleException = $this->createMock(GuzzleException::class);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with($creator, 'ask-jiminny-report-generated', $this->anything())\n ->willThrowException($guzzleException);\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n\n $this->addToAssertionCount(1);\n }\n\n public function testHandleTracksAutomatedReportWithSingleRecipient(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $user = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('team_performance');\n $report->expects($this->once())->method('getFrequency')->willReturn('daily');\n $report->expects($this->once())->method('getId')->willReturn(303);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$user]);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $user,\n 'automated-report-generated',\n ['report_type' => 'team_performance', 'frequency' => 'daily']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}\n\n+++\n\n<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Listeners\\AutomatedReports\\UserPilot\\TrackAutomatedReportGeneratedEvent;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse Tests\\TestCase;\n\nclass TrackAutomatedReportGeneratedEventTest extends TestCase\n{\n private UserPilotClient&MockObject $userPilotClient;\n private AutomatedReportsService&MockObject $automatedReportsService;\n\n protected function setUp(): void\n {\n parent::setUp();\n $this->userPilotClient = $this->createMock(UserPilotClient::class);\n $this->automatedReportsService = $this->createMock(AutomatedReportsService::class);\n }\n\n private function makeListener(): TrackAutomatedReportGeneratedEvent\n {\n return new TrackAutomatedReportGeneratedEvent(\n $this->userPilotClient,\n $this->automatedReportsService,\n );\n }\n\n private function makeEvent(AutomatedReport $report): AutomatedReportGenerated\n {\n return new AutomatedReportGenerated($report);\n }\n\n public function testHandleSkipsWhenUserPilotTokenIsNull(): void\n {\n config(['services.userpilot.token' => null]);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->never())->method('isAskJiminnyReport');\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksCreatorForAskJiminnyReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn($creator);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(123);\n\n $this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $creator,\n 'ask-jiminny-report-generated',\n ['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn(null);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(456);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksAllRecipientsForExecReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $userOne = $this->createMock(User::class);\n $userTwo = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(789);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$userOne, $userTwo]);\n\n $this->userPilotClient->expects($this->exactly(2))\n ->method('track')\n ->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {\n $this->assertTrue($user === $userOne || $user === $userTwo);\n $this->assertSame('automated-report-generated', $eventName);\n $this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);\n\n return null;\n });\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(101);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->willReturn([]);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotThrowOnGuzzleException(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->method('isAskJiminnyReport')->willReturn(true);\n $report->method('getCreator')->willReturn($creator);\n $report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->method('getFrequency')->willReturn('daily');\n $report->method('getId')->willReturn(202);\n\n $guzzleException = $this->createMock(GuzzleException::class);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with($creator, 'ask-jiminny-report-generated', $this->anything())\n ->willThrowException($guzzleException);\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n\n $this->addToAssertionCount(1);\n }\n\n public function testHandleTracksAutomatedReportWithSingleRecipient(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $user = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('team_performance');\n $report->expects($this->once())->method('getFrequency')->willReturn('daily');\n $report->expects($this->once())->method('getId')->willReturn(303);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$user]);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $user,\n 'automated-report-generated',\n ['report_type' => 'team_performance', 'frequency' => 'daily']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\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,"bounds":{"left":0.24335106,"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}]...
|
8802872861699676927
|
-814333409992410365
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20738-debug-AJ-trackin Project: faVsco.js, menu
JY-20738-debug-AJ-tracking-UP, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
+++
<?php
declare(strict_types=1);
namespace Tests\Unit\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Listeners\AutomatedReports\UserPilot\TrackAutomatedReportGeneratedEvent;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use PHPUnit\Framework\MockObject\MockObject;
use Tests\TestCase;
class TrackAutomatedReportGeneratedEventTest extends TestCase
{
private UserPilotClient&MockObject $userPilotClient;
private AutomatedReportsService&MockObject $automatedReportsService;
protected function setUp(): void
{
parent::setUp();
$this->userPilotClient = $this->createMock(UserPilotClient::class);
$this->automatedReportsService = $this->createMock(AutomatedReportsService::class);
}
private function makeListener(): TrackAutomatedReportGeneratedEvent
{
return new TrackAutomatedReportGeneratedEvent(
$this->userPilotClient,
$this->automatedReportsService,
);
}
private function makeEvent(AutomatedReport $report): AutomatedReportGenerated
{
return new AutomatedReportGenerated($report);
}
public function testHandleSkipsWhenUserPilotTokenIsNull(): void
{
config(['services.userpilot.token' => null]);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->never())->method('isAskJiminnyReport');
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksCreatorForAskJiminnyReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn($creator);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(123);
$this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$creator,
'ask-jiminny-report-generated',
['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn(null);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(456);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksAllRecipientsForExecReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$userOne = $this->createMock(User::class);
$userTwo = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(789);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$userOne, $userTwo]);
$this->userPilotClient->expects($this->exactly(2))
->method('track')
->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {
$this->assertTrue($user === $userOne || $user === $userTwo);
$this->assertSame('automated-report-generated', $eventName);
$this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);
return null;
});
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(101);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->willReturn([]);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotThrowOnGuzzleException(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->method('isAskJiminnyReport')->willReturn(true);
$report->method('getCreator')->willReturn($creator);
$report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->method('getFrequency')->willReturn('daily');
$report->method('getId')->willReturn(202);
$guzzleException = $this->createMock(GuzzleException::class);
$this->userPilotClient->expects($this->once())
->method('track')
->with($creator, 'ask-jiminny-report-generated', $this->anything())
->willThrowException($guzzleException);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
$this->addToAssertionCount(1);
}
public function testHandleTracksAutomatedReportWithSingleRecipient(): void
{
config(['services.userpilot.token' => 'NX-token']);
$user = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('team_performance');
$report->expects($this->once())->method('getFrequency')->willReturn('daily');
$report->expects($this->once())->method('getId')->willReturn(303);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$user]);
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$user,
'automated-report-generated',
['report_type' => 'team_performance', 'frequency' => 'daily']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
|
76772
|
1925
|
17
|
2026-04-24T08:24:02.058615+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777019042058_m1.jpg...
|
PhpStorm
|
faVsco.js – TrackAutomatedReportGeneratedEvent.php
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20738-debug-AJ-trackin Project: faVsco.js, menu
JY-20738-debug-AJ-tracking-UP, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
+++
<?php
declare(strict_types=1);
namespace Tests\Unit\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Listeners\AutomatedReports\UserPilot\TrackAutomatedReportGeneratedEvent;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use PHPUnit\Framework\MockObject\MockObject;
use Tests\TestCase;
class TrackAutomatedReportGeneratedEventTest extends TestCase
{
private UserPilotClient&MockObject $userPilotClient;
private AutomatedReportsService&MockObject $automatedReportsService;
protected function setUp(): void
{
parent::setUp();
$this->userPilotClient = $this->createMock(UserPilotClient::class);
$this->automatedReportsService = $this->createMock(AutomatedReportsService::class);
}
private function makeListener(): TrackAutomatedReportGeneratedEvent
{
return new TrackAutomatedReportGeneratedEvent(
$this->userPilotClient,
$this->automatedReportsService,
);
}
private function makeEvent(AutomatedReport $report): AutomatedReportGenerated
{
return new AutomatedReportGenerated($report);
}
public function testHandleSkipsWhenUserPilotTokenIsNull(): void
{
config(['services.userpilot.token' => null]);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->never())->method('isAskJiminnyReport');
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksCreatorForAskJiminnyReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn($creator);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(123);
$this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$creator,
'ask-jiminny-report-generated',
['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn(null);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(456);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksAllRecipientsForExecReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$userOne = $this->createMock(User::class);
$userTwo = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(789);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$userOne, $userTwo]);
$this->userPilotClient->expects($this->exactly(2))
->method('track')
->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {
$this->assertTrue($user === $userOne || $user === $userTwo);
$this->assertSame('automated-report-generated', $eventName);
$this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);
return null;
});
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(101);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->willReturn([]);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotThrowOnGuzzleException(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->method('isAskJiminnyReport')->willReturn(true);
$report->method('getCreator')->willReturn($creator);
$report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->method('getFrequency')->willReturn('daily');
$report->method('getId')->willReturn(202);
$guzzleException = $this->createMock(GuzzleException::class);
$this->userPilotClient->expects($this->once())
->method('track')
->with($creator, 'ask-jiminny-report-generated', $this->anything())
->willThrowException($guzzleException);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
$this->addToAssertionCount(1);
}
public function testHandleTracksAutomatedReportWithSingleRecipient(): void
{
config(['services.userpilot.token' => 'NX-token']);
$user = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('team_performance');
$report->expects($this->once())->method('getFrequency')->willReturn('daily');
$report->expects($this->once())->method('getId')->willReturn(303);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$user]);
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$user,
'automated-report-generated',
['report_type' => 'team_performance', 'frequency' => 'daily']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($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":"JY-20738-debug-AJ-tracking-UP, menu","depth":5,"help_text":"Git Branch: JY-20738-debug-AJ-tracking-UP","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":"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":"1","depth":4,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"role_description":"text"},{"role":"AXStaticText","text":"1","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\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"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":"43","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\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}\n\n+++\n\n<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Listeners\\AutomatedReports\\UserPilot\\TrackAutomatedReportGeneratedEvent;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse Tests\\TestCase;\n\nclass TrackAutomatedReportGeneratedEventTest extends TestCase\n{\n private UserPilotClient&MockObject $userPilotClient;\n private AutomatedReportsService&MockObject $automatedReportsService;\n\n protected function setUp(): void\n {\n parent::setUp();\n $this->userPilotClient = $this->createMock(UserPilotClient::class);\n $this->automatedReportsService = $this->createMock(AutomatedReportsService::class);\n }\n\n private function makeListener(): TrackAutomatedReportGeneratedEvent\n {\n return new TrackAutomatedReportGeneratedEvent(\n $this->userPilotClient,\n $this->automatedReportsService,\n );\n }\n\n private function makeEvent(AutomatedReport $report): AutomatedReportGenerated\n {\n return new AutomatedReportGenerated($report);\n }\n\n public function testHandleSkipsWhenUserPilotTokenIsNull(): void\n {\n config(['services.userpilot.token' => null]);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->never())->method('isAskJiminnyReport');\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksCreatorForAskJiminnyReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn($creator);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(123);\n\n $this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $creator,\n 'ask-jiminny-report-generated',\n ['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn(null);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(456);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksAllRecipientsForExecReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $userOne = $this->createMock(User::class);\n $userTwo = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(789);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$userOne, $userTwo]);\n\n $this->userPilotClient->expects($this->exactly(2))\n ->method('track')\n ->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {\n $this->assertTrue($user === $userOne || $user === $userTwo);\n $this->assertSame('automated-report-generated', $eventName);\n $this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);\n\n return null;\n });\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(101);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->willReturn([]);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotThrowOnGuzzleException(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->method('isAskJiminnyReport')->willReturn(true);\n $report->method('getCreator')->willReturn($creator);\n $report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->method('getFrequency')->willReturn('daily');\n $report->method('getId')->willReturn(202);\n\n $guzzleException = $this->createMock(GuzzleException::class);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with($creator, 'ask-jiminny-report-generated', $this->anything())\n ->willThrowException($guzzleException);\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n\n $this->addToAssertionCount(1);\n }\n\n public function testHandleTracksAutomatedReportWithSingleRecipient(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $user = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('team_performance');\n $report->expects($this->once())->method('getFrequency')->willReturn('daily');\n $report->expects($this->once())->method('getId')->willReturn(303);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$user]);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $user,\n 'automated-report-generated',\n ['report_type' => 'team_performance', 'frequency' => 'daily']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}\n\n+++\n\n<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Listeners\\AutomatedReports\\UserPilot\\TrackAutomatedReportGeneratedEvent;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse Tests\\TestCase;\n\nclass TrackAutomatedReportGeneratedEventTest extends TestCase\n{\n private UserPilotClient&MockObject $userPilotClient;\n private AutomatedReportsService&MockObject $automatedReportsService;\n\n protected function setUp(): void\n {\n parent::setUp();\n $this->userPilotClient = $this->createMock(UserPilotClient::class);\n $this->automatedReportsService = $this->createMock(AutomatedReportsService::class);\n }\n\n private function makeListener(): TrackAutomatedReportGeneratedEvent\n {\n return new TrackAutomatedReportGeneratedEvent(\n $this->userPilotClient,\n $this->automatedReportsService,\n );\n }\n\n private function makeEvent(AutomatedReport $report): AutomatedReportGenerated\n {\n return new AutomatedReportGenerated($report);\n }\n\n public function testHandleSkipsWhenUserPilotTokenIsNull(): void\n {\n config(['services.userpilot.token' => null]);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->never())->method('isAskJiminnyReport');\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksCreatorForAskJiminnyReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn($creator);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(123);\n\n $this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $creator,\n 'ask-jiminny-report-generated',\n ['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn(null);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(456);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksAllRecipientsForExecReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $userOne = $this->createMock(User::class);\n $userTwo = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(789);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$userOne, $userTwo]);\n\n $this->userPilotClient->expects($this->exactly(2))\n ->method('track')\n ->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {\n $this->assertTrue($user === $userOne || $user === $userTwo);\n $this->assertSame('automated-report-generated', $eventName);\n $this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);\n\n return null;\n });\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(101);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->willReturn([]);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotThrowOnGuzzleException(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->method('isAskJiminnyReport')->willReturn(true);\n $report->method('getCreator')->willReturn($creator);\n $report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->method('getFrequency')->willReturn('daily');\n $report->method('getId')->willReturn(202);\n\n $guzzleException = $this->createMock(GuzzleException::class);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with($creator, 'ask-jiminny-report-generated', $this->anything())\n ->willThrowException($guzzleException);\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n\n $this->addToAssertionCount(1);\n }\n\n public function testHandleTracksAutomatedReportWithSingleRecipient(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $user = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('team_performance');\n $report->expects($this->once())->method('getFrequency')->willReturn('daily');\n $report->expects($this->once())->method('getId')->willReturn(303);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$user]);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $user,\n 'automated-report-generated',\n ['report_type' => 'team_performance', 'frequency' => 'daily']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\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}]...
|
8802872861699676927
|
-814333409992410365
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20738-debug-AJ-trackin Project: faVsco.js, menu
JY-20738-debug-AJ-tracking-UP, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
+++
<?php
declare(strict_types=1);
namespace Tests\Unit\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Listeners\AutomatedReports\UserPilot\TrackAutomatedReportGeneratedEvent;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use PHPUnit\Framework\MockObject\MockObject;
use Tests\TestCase;
class TrackAutomatedReportGeneratedEventTest extends TestCase
{
private UserPilotClient&MockObject $userPilotClient;
private AutomatedReportsService&MockObject $automatedReportsService;
protected function setUp(): void
{
parent::setUp();
$this->userPilotClient = $this->createMock(UserPilotClient::class);
$this->automatedReportsService = $this->createMock(AutomatedReportsService::class);
}
private function makeListener(): TrackAutomatedReportGeneratedEvent
{
return new TrackAutomatedReportGeneratedEvent(
$this->userPilotClient,
$this->automatedReportsService,
);
}
private function makeEvent(AutomatedReport $report): AutomatedReportGenerated
{
return new AutomatedReportGenerated($report);
}
public function testHandleSkipsWhenUserPilotTokenIsNull(): void
{
config(['services.userpilot.token' => null]);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->never())->method('isAskJiminnyReport');
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksCreatorForAskJiminnyReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn($creator);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(123);
$this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$creator,
'ask-jiminny-report-generated',
['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn(null);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(456);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksAllRecipientsForExecReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$userOne = $this->createMock(User::class);
$userTwo = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(789);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$userOne, $userTwo]);
$this->userPilotClient->expects($this->exactly(2))
->method('track')
->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {
$this->assertTrue($user === $userOne || $user === $userTwo);
$this->assertSame('automated-report-generated', $eventName);
$this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);
return null;
});
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(101);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->willReturn([]);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotThrowOnGuzzleException(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->method('isAskJiminnyReport')->willReturn(true);
$report->method('getCreator')->willReturn($creator);
$report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->method('getFrequency')->willReturn('daily');
$report->method('getId')->willReturn(202);
$guzzleException = $this->createMock(GuzzleException::class);
$this->userPilotClient->expects($this->once())
->method('track')
->with($creator, 'ask-jiminny-report-generated', $this->anything())
->willThrowException($guzzleException);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
$this->addToAssertionCount(1);
}
public function testHandleTracksAutomatedReportWithSingleRecipient(): void
{
config(['services.userpilot.token' => 'NX-token']);
$user = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('team_performance');
$report->expects($this->once())->method('getFrequency')->willReturn('daily');
$report->expects($this->once())->method('getId')->willReturn(303);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$user]);
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$user,
'automated-report-generated',
['report_type' => 'team_performance', 'frequency' => 'daily']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
|
76773
|
1926
|
13
|
2026-04-24T08:24:03.620013+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777019043620_m2.jpg...
|
PhpStorm
|
faVsco.js – TrackAutomatedReportGeneratedEvent.php
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20738-debug-AJ-trackin Project: faVsco.js, menu
JY-20738-debug-AJ-tracking-UP, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
+++
<?php
declare(strict_types=1);
namespace Tests\Unit\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Listeners\AutomatedReports\UserPilot\TrackAutomatedReportGeneratedEvent;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use PHPUnit\Framework\MockObject\MockObject;
use Tests\TestCase;
class TrackAutomatedReportGeneratedEventTest extends TestCase
{
private UserPilotClient&MockObject $userPilotClient;
private AutomatedReportsService&MockObject $automatedReportsService;
protected function setUp(): void
{
parent::setUp();
$this->userPilotClient = $this->createMock(UserPilotClient::class);
$this->automatedReportsService = $this->createMock(AutomatedReportsService::class);
}
private function makeListener(): TrackAutomatedReportGeneratedEvent
{
return new TrackAutomatedReportGeneratedEvent(
$this->userPilotClient,
$this->automatedReportsService,
);
}
private function makeEvent(AutomatedReport $report): AutomatedReportGenerated
{
return new AutomatedReportGenerated($report);
}
public function testHandleSkipsWhenUserPilotTokenIsNull(): void
{
config(['services.userpilot.token' => null]);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->never())->method('isAskJiminnyReport');
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksCreatorForAskJiminnyReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn($creator);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(123);
$this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$creator,
'ask-jiminny-report-generated',
['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn(null);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(456);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksAllRecipientsForExecReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$userOne = $this->createMock(User::class);
$userTwo = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(789);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$userOne, $userTwo]);
$this->userPilotClient->expects($this->exactly(2))
->method('track')
->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {
$this->assertTrue($user === $userOne || $user === $userTwo);
$this->assertSame('automated-report-generated', $eventName);
$this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);
return null;
});
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(101);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->willReturn([]);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotThrowOnGuzzleException(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->method('isAskJiminnyReport')->willReturn(true);
$report->method('getCreator')->willReturn($creator);
$report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->method('getFrequency')->willReturn('daily');
$report->method('getId')->willReturn(202);
$guzzleException = $this->createMock(GuzzleException::class);
$this->userPilotClient->expects($this->once())
->method('track')
->with($creator, 'ask-jiminny-report-generated', $this->anything())
->willThrowException($guzzleException);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
$this->addToAssertionCount(1);
}
public function testHandleTracksAutomatedReportWithSingleRecipient(): void
{
config(['services.userpilot.token' => 'NX-token']);
$user = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('team_performance');
$report->expects($this->once())->method('getFrequency')->willReturn('daily');
$report->expects($this->once())->method('getId')->willReturn(303);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$user]);
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$user,
'automated-report-generated',
['report_type' => 'team_performance', 'frequency' => 'daily']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($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,"bounds":{"left":0.25731382,"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":"JY-20738-debug-AJ-tracking-UP, menu","depth":5,"bounds":{"left":0.29587767,"top":0.019952115,"width":0.08510638,"height":0.025538707},"help_text":"Git Branch: JY-20738-debug-AJ-tracking-UP","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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.6200133,"top":0.10055866,"width":0.00731383,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.6293218,"top":0.10055866,"width":0.00731383,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.63863033,"top":0.10055866,"width":0.00731383,"height":0.015163607},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6476064,"top":0.09896249,"width":0.00731383,"height":0.018355945},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.6549202,"top":0.09896249,"width":0.006981383,"height":0.018355945},"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\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"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":"AXStaticText","text":"43","depth":4,"bounds":{"left":0.96210104,"top":0.10055866,"width":0.010305851,"height":0.015163607},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.09896249,"width":0.00731383,"height":0.018355945},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.09896249,"width":0.006981383,"height":0.018355945},"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\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}\n\n+++\n\n<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Listeners\\AutomatedReports\\UserPilot\\TrackAutomatedReportGeneratedEvent;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse Tests\\TestCase;\n\nclass TrackAutomatedReportGeneratedEventTest extends TestCase\n{\n private UserPilotClient&MockObject $userPilotClient;\n private AutomatedReportsService&MockObject $automatedReportsService;\n\n protected function setUp(): void\n {\n parent::setUp();\n $this->userPilotClient = $this->createMock(UserPilotClient::class);\n $this->automatedReportsService = $this->createMock(AutomatedReportsService::class);\n }\n\n private function makeListener(): TrackAutomatedReportGeneratedEvent\n {\n return new TrackAutomatedReportGeneratedEvent(\n $this->userPilotClient,\n $this->automatedReportsService,\n );\n }\n\n private function makeEvent(AutomatedReport $report): AutomatedReportGenerated\n {\n return new AutomatedReportGenerated($report);\n }\n\n public function testHandleSkipsWhenUserPilotTokenIsNull(): void\n {\n config(['services.userpilot.token' => null]);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->never())->method('isAskJiminnyReport');\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksCreatorForAskJiminnyReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn($creator);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(123);\n\n $this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $creator,\n 'ask-jiminny-report-generated',\n ['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn(null);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(456);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksAllRecipientsForExecReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $userOne = $this->createMock(User::class);\n $userTwo = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(789);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$userOne, $userTwo]);\n\n $this->userPilotClient->expects($this->exactly(2))\n ->method('track')\n ->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {\n $this->assertTrue($user === $userOne || $user === $userTwo);\n $this->assertSame('automated-report-generated', $eventName);\n $this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);\n\n return null;\n });\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(101);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->willReturn([]);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotThrowOnGuzzleException(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->method('isAskJiminnyReport')->willReturn(true);\n $report->method('getCreator')->willReturn($creator);\n $report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->method('getFrequency')->willReturn('daily');\n $report->method('getId')->willReturn(202);\n\n $guzzleException = $this->createMock(GuzzleException::class);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with($creator, 'ask-jiminny-report-generated', $this->anything())\n ->willThrowException($guzzleException);\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n\n $this->addToAssertionCount(1);\n }\n\n public function testHandleTracksAutomatedReportWithSingleRecipient(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $user = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('team_performance');\n $report->expects($this->once())->method('getFrequency')->willReturn('daily');\n $report->expects($this->once())->method('getId')->willReturn(303);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$user]);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $user,\n 'automated-report-generated',\n ['report_type' => 'team_performance', 'frequency' => 'daily']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}\n\n+++\n\n<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Listeners\\AutomatedReports\\UserPilot\\TrackAutomatedReportGeneratedEvent;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse Tests\\TestCase;\n\nclass TrackAutomatedReportGeneratedEventTest extends TestCase\n{\n private UserPilotClient&MockObject $userPilotClient;\n private AutomatedReportsService&MockObject $automatedReportsService;\n\n protected function setUp(): void\n {\n parent::setUp();\n $this->userPilotClient = $this->createMock(UserPilotClient::class);\n $this->automatedReportsService = $this->createMock(AutomatedReportsService::class);\n }\n\n private function makeListener(): TrackAutomatedReportGeneratedEvent\n {\n return new TrackAutomatedReportGeneratedEvent(\n $this->userPilotClient,\n $this->automatedReportsService,\n );\n }\n\n private function makeEvent(AutomatedReport $report): AutomatedReportGenerated\n {\n return new AutomatedReportGenerated($report);\n }\n\n public function testHandleSkipsWhenUserPilotTokenIsNull(): void\n {\n config(['services.userpilot.token' => null]);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->never())->method('isAskJiminnyReport');\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksCreatorForAskJiminnyReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn($creator);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(123);\n\n $this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $creator,\n 'ask-jiminny-report-generated',\n ['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn(null);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(456);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksAllRecipientsForExecReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $userOne = $this->createMock(User::class);\n $userTwo = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(789);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$userOne, $userTwo]);\n\n $this->userPilotClient->expects($this->exactly(2))\n ->method('track')\n ->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {\n $this->assertTrue($user === $userOne || $user === $userTwo);\n $this->assertSame('automated-report-generated', $eventName);\n $this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);\n\n return null;\n });\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(101);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->willReturn([]);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotThrowOnGuzzleException(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->method('isAskJiminnyReport')->willReturn(true);\n $report->method('getCreator')->willReturn($creator);\n $report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->method('getFrequency')->willReturn('daily');\n $report->method('getId')->willReturn(202);\n\n $guzzleException = $this->createMock(GuzzleException::class);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with($creator, 'ask-jiminny-report-generated', $this->anything())\n ->willThrowException($guzzleException);\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n\n $this->addToAssertionCount(1);\n }\n\n public function testHandleTracksAutomatedReportWithSingleRecipient(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $user = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('team_performance');\n $report->expects($this->once())->method('getFrequency')->willReturn('daily');\n $report->expects($this->once())->method('getId')->willReturn(303);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$user]);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $user,\n 'automated-report-generated',\n ['report_type' => 'team_performance', 'frequency' => 'daily']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\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,"bounds":{"left":0.24335106,"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}]...
|
8802872861699676927
|
-814333409992410365
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20738-debug-AJ-trackin Project: faVsco.js, menu
JY-20738-debug-AJ-tracking-UP, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
+++
<?php
declare(strict_types=1);
namespace Tests\Unit\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Listeners\AutomatedReports\UserPilot\TrackAutomatedReportGeneratedEvent;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use PHPUnit\Framework\MockObject\MockObject;
use Tests\TestCase;
class TrackAutomatedReportGeneratedEventTest extends TestCase
{
private UserPilotClient&MockObject $userPilotClient;
private AutomatedReportsService&MockObject $automatedReportsService;
protected function setUp(): void
{
parent::setUp();
$this->userPilotClient = $this->createMock(UserPilotClient::class);
$this->automatedReportsService = $this->createMock(AutomatedReportsService::class);
}
private function makeListener(): TrackAutomatedReportGeneratedEvent
{
return new TrackAutomatedReportGeneratedEvent(
$this->userPilotClient,
$this->automatedReportsService,
);
}
private function makeEvent(AutomatedReport $report): AutomatedReportGenerated
{
return new AutomatedReportGenerated($report);
}
public function testHandleSkipsWhenUserPilotTokenIsNull(): void
{
config(['services.userpilot.token' => null]);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->never())->method('isAskJiminnyReport');
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksCreatorForAskJiminnyReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn($creator);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(123);
$this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$creator,
'ask-jiminny-report-generated',
['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn(null);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(456);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksAllRecipientsForExecReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$userOne = $this->createMock(User::class);
$userTwo = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(789);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$userOne, $userTwo]);
$this->userPilotClient->expects($this->exactly(2))
->method('track')
->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {
$this->assertTrue($user === $userOne || $user === $userTwo);
$this->assertSame('automated-report-generated', $eventName);
$this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);
return null;
});
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(101);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->willReturn([]);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotThrowOnGuzzleException(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->method('isAskJiminnyReport')->willReturn(true);
$report->method('getCreator')->willReturn($creator);
$report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->method('getFrequency')->willReturn('daily');
$report->method('getId')->willReturn(202);
$guzzleException = $this->createMock(GuzzleException::class);
$this->userPilotClient->expects($this->once())
->method('track')
->with($creator, 'ask-jiminny-report-generated', $this->anything())
->willThrowException($guzzleException);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
$this->addToAssertionCount(1);
}
public function testHandleTracksAutomatedReportWithSingleRecipient(): void
{
config(['services.userpilot.token' => 'NX-token']);
$user = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('team_performance');
$report->expects($this->once())->method('getFrequency')->willReturn('daily');
$report->expects($this->once())->method('getId')->willReturn(303);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$user]);
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$user,
'automated-report-generated',
['report_type' => 'team_performance', 'frequency' => 'daily']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
76771
|
|
76774
|
1925
|
18
|
2026-04-24T08:24:33.891964+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777019073891_m1.jpg...
|
PhpStorm
|
faVsco.js – TrackAutomatedReportGeneratedEvent.php
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20738-debug-AJ-trackin Project: faVsco.js, menu
JY-20738-debug-AJ-tracking-UP, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
+++
<?php
declare(strict_types=1);
namespace Tests\Unit\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Listeners\AutomatedReports\UserPilot\TrackAutomatedReportGeneratedEvent;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use PHPUnit\Framework\MockObject\MockObject;
use Tests\TestCase;
class TrackAutomatedReportGeneratedEventTest extends TestCase
{
private UserPilotClient&MockObject $userPilotClient;
private AutomatedReportsService&MockObject $automatedReportsService;
protected function setUp(): void
{
parent::setUp();
$this->userPilotClient = $this->createMock(UserPilotClient::class);
$this->automatedReportsService = $this->createMock(AutomatedReportsService::class);
}
private function makeListener(): TrackAutomatedReportGeneratedEvent
{
return new TrackAutomatedReportGeneratedEvent(
$this->userPilotClient,
$this->automatedReportsService,
);
}
private function makeEvent(AutomatedReport $report): AutomatedReportGenerated
{
return new AutomatedReportGenerated($report);
}
public function testHandleSkipsWhenUserPilotTokenIsNull(): void
{
config(['services.userpilot.token' => null]);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->never())->method('isAskJiminnyReport');
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksCreatorForAskJiminnyReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn($creator);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(123);
$this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$creator,
'ask-jiminny-report-generated',
['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn(null);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(456);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksAllRecipientsForExecReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$userOne = $this->createMock(User::class);
$userTwo = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(789);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$userOne, $userTwo]);
$this->userPilotClient->expects($this->exactly(2))
->method('track')
->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {
$this->assertTrue($user === $userOne || $user === $userTwo);
$this->assertSame('automated-report-generated', $eventName);
$this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);
return null;
});
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(101);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->willReturn([]);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotThrowOnGuzzleException(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->method('isAskJiminnyReport')->willReturn(true);
$report->method('getCreator')->willReturn($creator);
$report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->method('getFrequency')->willReturn('daily');
$report->method('getId')->willReturn(202);
$guzzleException = $this->createMock(GuzzleException::class);
$this->userPilotClient->expects($this->once())
->method('track')
->with($creator, 'ask-jiminny-report-generated', $this->anything())
->willThrowException($guzzleException);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
$this->addToAssertionCount(1);
}
public function testHandleTracksAutomatedReportWithSingleRecipient(): void
{
config(['services.userpilot.token' => 'NX-token']);
$user = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('team_performance');
$report->expects($this->once())->method('getFrequency')->willReturn('daily');
$report->expects($this->once())->method('getId')->willReturn(303);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$user]);
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$user,
'automated-report-generated',
['report_type' => 'team_performance', 'frequency' => 'daily']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($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":"JY-20738-debug-AJ-tracking-UP, menu","depth":5,"help_text":"Git Branch: JY-20738-debug-AJ-tracking-UP","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":"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":"1","depth":4,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"role_description":"text"},{"role":"AXStaticText","text":"1","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\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"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":"43","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\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}\n\n+++\n\n<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Listeners\\AutomatedReports\\UserPilot\\TrackAutomatedReportGeneratedEvent;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse Tests\\TestCase;\n\nclass TrackAutomatedReportGeneratedEventTest extends TestCase\n{\n private UserPilotClient&MockObject $userPilotClient;\n private AutomatedReportsService&MockObject $automatedReportsService;\n\n protected function setUp(): void\n {\n parent::setUp();\n $this->userPilotClient = $this->createMock(UserPilotClient::class);\n $this->automatedReportsService = $this->createMock(AutomatedReportsService::class);\n }\n\n private function makeListener(): TrackAutomatedReportGeneratedEvent\n {\n return new TrackAutomatedReportGeneratedEvent(\n $this->userPilotClient,\n $this->automatedReportsService,\n );\n }\n\n private function makeEvent(AutomatedReport $report): AutomatedReportGenerated\n {\n return new AutomatedReportGenerated($report);\n }\n\n public function testHandleSkipsWhenUserPilotTokenIsNull(): void\n {\n config(['services.userpilot.token' => null]);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->never())->method('isAskJiminnyReport');\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksCreatorForAskJiminnyReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn($creator);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(123);\n\n $this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $creator,\n 'ask-jiminny-report-generated',\n ['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn(null);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(456);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksAllRecipientsForExecReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $userOne = $this->createMock(User::class);\n $userTwo = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(789);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$userOne, $userTwo]);\n\n $this->userPilotClient->expects($this->exactly(2))\n ->method('track')\n ->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {\n $this->assertTrue($user === $userOne || $user === $userTwo);\n $this->assertSame('automated-report-generated', $eventName);\n $this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);\n\n return null;\n });\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(101);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->willReturn([]);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotThrowOnGuzzleException(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->method('isAskJiminnyReport')->willReturn(true);\n $report->method('getCreator')->willReturn($creator);\n $report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->method('getFrequency')->willReturn('daily');\n $report->method('getId')->willReturn(202);\n\n $guzzleException = $this->createMock(GuzzleException::class);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with($creator, 'ask-jiminny-report-generated', $this->anything())\n ->willThrowException($guzzleException);\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n\n $this->addToAssertionCount(1);\n }\n\n public function testHandleTracksAutomatedReportWithSingleRecipient(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $user = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('team_performance');\n $report->expects($this->once())->method('getFrequency')->willReturn('daily');\n $report->expects($this->once())->method('getId')->willReturn(303);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$user]);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $user,\n 'automated-report-generated',\n ['report_type' => 'team_performance', 'frequency' => 'daily']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}\n\n+++\n\n<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Listeners\\AutomatedReports\\UserPilot\\TrackAutomatedReportGeneratedEvent;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse Tests\\TestCase;\n\nclass TrackAutomatedReportGeneratedEventTest extends TestCase\n{\n private UserPilotClient&MockObject $userPilotClient;\n private AutomatedReportsService&MockObject $automatedReportsService;\n\n protected function setUp(): void\n {\n parent::setUp();\n $this->userPilotClient = $this->createMock(UserPilotClient::class);\n $this->automatedReportsService = $this->createMock(AutomatedReportsService::class);\n }\n\n private function makeListener(): TrackAutomatedReportGeneratedEvent\n {\n return new TrackAutomatedReportGeneratedEvent(\n $this->userPilotClient,\n $this->automatedReportsService,\n );\n }\n\n private function makeEvent(AutomatedReport $report): AutomatedReportGenerated\n {\n return new AutomatedReportGenerated($report);\n }\n\n public function testHandleSkipsWhenUserPilotTokenIsNull(): void\n {\n config(['services.userpilot.token' => null]);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->never())->method('isAskJiminnyReport');\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksCreatorForAskJiminnyReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn($creator);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(123);\n\n $this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $creator,\n 'ask-jiminny-report-generated',\n ['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn(null);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(456);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksAllRecipientsForExecReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $userOne = $this->createMock(User::class);\n $userTwo = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(789);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$userOne, $userTwo]);\n\n $this->userPilotClient->expects($this->exactly(2))\n ->method('track')\n ->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {\n $this->assertTrue($user === $userOne || $user === $userTwo);\n $this->assertSame('automated-report-generated', $eventName);\n $this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);\n\n return null;\n });\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(101);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->willReturn([]);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotThrowOnGuzzleException(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->method('isAskJiminnyReport')->willReturn(true);\n $report->method('getCreator')->willReturn($creator);\n $report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->method('getFrequency')->willReturn('daily');\n $report->method('getId')->willReturn(202);\n\n $guzzleException = $this->createMock(GuzzleException::class);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with($creator, 'ask-jiminny-report-generated', $this->anything())\n ->willThrowException($guzzleException);\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n\n $this->addToAssertionCount(1);\n }\n\n public function testHandleTracksAutomatedReportWithSingleRecipient(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $user = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('team_performance');\n $report->expects($this->once())->method('getFrequency')->willReturn('daily');\n $report->expects($this->once())->method('getId')->willReturn(303);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$user]);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $user,\n 'automated-report-generated',\n ['report_type' => 'team_performance', 'frequency' => 'daily']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\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}]...
|
8802872861699676927
|
-814333409992410365
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20738-debug-AJ-trackin Project: faVsco.js, menu
JY-20738-debug-AJ-tracking-UP, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
+++
<?php
declare(strict_types=1);
namespace Tests\Unit\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Listeners\AutomatedReports\UserPilot\TrackAutomatedReportGeneratedEvent;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use PHPUnit\Framework\MockObject\MockObject;
use Tests\TestCase;
class TrackAutomatedReportGeneratedEventTest extends TestCase
{
private UserPilotClient&MockObject $userPilotClient;
private AutomatedReportsService&MockObject $automatedReportsService;
protected function setUp(): void
{
parent::setUp();
$this->userPilotClient = $this->createMock(UserPilotClient::class);
$this->automatedReportsService = $this->createMock(AutomatedReportsService::class);
}
private function makeListener(): TrackAutomatedReportGeneratedEvent
{
return new TrackAutomatedReportGeneratedEvent(
$this->userPilotClient,
$this->automatedReportsService,
);
}
private function makeEvent(AutomatedReport $report): AutomatedReportGenerated
{
return new AutomatedReportGenerated($report);
}
public function testHandleSkipsWhenUserPilotTokenIsNull(): void
{
config(['services.userpilot.token' => null]);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->never())->method('isAskJiminnyReport');
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksCreatorForAskJiminnyReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn($creator);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(123);
$this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$creator,
'ask-jiminny-report-generated',
['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn(null);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(456);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksAllRecipientsForExecReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$userOne = $this->createMock(User::class);
$userTwo = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(789);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$userOne, $userTwo]);
$this->userPilotClient->expects($this->exactly(2))
->method('track')
->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {
$this->assertTrue($user === $userOne || $user === $userTwo);
$this->assertSame('automated-report-generated', $eventName);
$this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);
return null;
});
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(101);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->willReturn([]);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotThrowOnGuzzleException(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->method('isAskJiminnyReport')->willReturn(true);
$report->method('getCreator')->willReturn($creator);
$report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->method('getFrequency')->willReturn('daily');
$report->method('getId')->willReturn(202);
$guzzleException = $this->createMock(GuzzleException::class);
$this->userPilotClient->expects($this->once())
->method('track')
->with($creator, 'ask-jiminny-report-generated', $this->anything())
->willThrowException($guzzleException);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
$this->addToAssertionCount(1);
}
public function testHandleTracksAutomatedReportWithSingleRecipient(): void
{
config(['services.userpilot.token' => 'NX-token']);
$user = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('team_performance');
$report->expects($this->once())->method('getFrequency')->willReturn('daily');
$report->expects($this->once())->method('getId')->willReturn(303);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$user]);
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$user,
'automated-report-generated',
['report_type' => 'team_performance', 'frequency' => 'daily']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
76772
|
|
76775
|
1926
|
14
|
2026-04-24T08:24:34.200376+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777019074200_m2.jpg...
|
PhpStorm
|
faVsco.js – TrackAutomatedReportGeneratedEvent.php
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20738-debug-AJ-trackin Project: faVsco.js, menu
JY-20738-debug-AJ-tracking-UP, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
+++
<?php
declare(strict_types=1);
namespace Tests\Unit\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Listeners\AutomatedReports\UserPilot\TrackAutomatedReportGeneratedEvent;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use PHPUnit\Framework\MockObject\MockObject;
use Tests\TestCase;
class TrackAutomatedReportGeneratedEventTest extends TestCase
{
private UserPilotClient&MockObject $userPilotClient;
private AutomatedReportsService&MockObject $automatedReportsService;
protected function setUp(): void
{
parent::setUp();
$this->userPilotClient = $this->createMock(UserPilotClient::class);
$this->automatedReportsService = $this->createMock(AutomatedReportsService::class);
}
private function makeListener(): TrackAutomatedReportGeneratedEvent
{
return new TrackAutomatedReportGeneratedEvent(
$this->userPilotClient,
$this->automatedReportsService,
);
}
private function makeEvent(AutomatedReport $report): AutomatedReportGenerated
{
return new AutomatedReportGenerated($report);
}
public function testHandleSkipsWhenUserPilotTokenIsNull(): void
{
config(['services.userpilot.token' => null]);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->never())->method('isAskJiminnyReport');
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksCreatorForAskJiminnyReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn($creator);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(123);
$this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$creator,
'ask-jiminny-report-generated',
['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn(null);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(456);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksAllRecipientsForExecReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$userOne = $this->createMock(User::class);
$userTwo = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(789);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$userOne, $userTwo]);
$this->userPilotClient->expects($this->exactly(2))
->method('track')
->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {
$this->assertTrue($user === $userOne || $user === $userTwo);
$this->assertSame('automated-report-generated', $eventName);
$this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);
return null;
});
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(101);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->willReturn([]);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotThrowOnGuzzleException(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->method('isAskJiminnyReport')->willReturn(true);
$report->method('getCreator')->willReturn($creator);
$report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->method('getFrequency')->willReturn('daily');
$report->method('getId')->willReturn(202);
$guzzleException = $this->createMock(GuzzleException::class);
$this->userPilotClient->expects($this->once())
->method('track')
->with($creator, 'ask-jiminny-report-generated', $this->anything())
->willThrowException($guzzleException);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
$this->addToAssertionCount(1);
}
public function testHandleTracksAutomatedReportWithSingleRecipient(): void
{
config(['services.userpilot.token' => 'NX-token']);
$user = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('team_performance');
$report->expects($this->once())->method('getFrequency')->willReturn('daily');
$report->expects($this->once())->method('getId')->willReturn(303);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$user]);
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$user,
'automated-report-generated',
['report_type' => 'team_performance', 'frequency' => 'daily']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($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,"bounds":{"left":0.25731382,"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":"JY-20738-debug-AJ-tracking-UP, menu","depth":5,"bounds":{"left":0.29587767,"top":0.019952115,"width":0.08510638,"height":0.025538707},"help_text":"Git Branch: JY-20738-debug-AJ-tracking-UP","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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.6200133,"top":0.10055866,"width":0.00731383,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.6293218,"top":0.10055866,"width":0.00731383,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.63863033,"top":0.10055866,"width":0.00731383,"height":0.015163607},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6476064,"top":0.09896249,"width":0.00731383,"height":0.018355945},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.6549202,"top":0.09896249,"width":0.006981383,"height":0.018355945},"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\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"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":"AXStaticText","text":"43","depth":4,"bounds":{"left":0.96210104,"top":0.10055866,"width":0.010305851,"height":0.015163607},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.09896249,"width":0.00731383,"height":0.018355945},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.09896249,"width":0.006981383,"height":0.018355945},"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\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}\n\n+++\n\n<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Listeners\\AutomatedReports\\UserPilot\\TrackAutomatedReportGeneratedEvent;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse Tests\\TestCase;\n\nclass TrackAutomatedReportGeneratedEventTest extends TestCase\n{\n private UserPilotClient&MockObject $userPilotClient;\n private AutomatedReportsService&MockObject $automatedReportsService;\n\n protected function setUp(): void\n {\n parent::setUp();\n $this->userPilotClient = $this->createMock(UserPilotClient::class);\n $this->automatedReportsService = $this->createMock(AutomatedReportsService::class);\n }\n\n private function makeListener(): TrackAutomatedReportGeneratedEvent\n {\n return new TrackAutomatedReportGeneratedEvent(\n $this->userPilotClient,\n $this->automatedReportsService,\n );\n }\n\n private function makeEvent(AutomatedReport $report): AutomatedReportGenerated\n {\n return new AutomatedReportGenerated($report);\n }\n\n public function testHandleSkipsWhenUserPilotTokenIsNull(): void\n {\n config(['services.userpilot.token' => null]);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->never())->method('isAskJiminnyReport');\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksCreatorForAskJiminnyReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn($creator);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(123);\n\n $this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $creator,\n 'ask-jiminny-report-generated',\n ['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn(null);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(456);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksAllRecipientsForExecReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $userOne = $this->createMock(User::class);\n $userTwo = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(789);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$userOne, $userTwo]);\n\n $this->userPilotClient->expects($this->exactly(2))\n ->method('track')\n ->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {\n $this->assertTrue($user === $userOne || $user === $userTwo);\n $this->assertSame('automated-report-generated', $eventName);\n $this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);\n\n return null;\n });\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(101);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->willReturn([]);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotThrowOnGuzzleException(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->method('isAskJiminnyReport')->willReturn(true);\n $report->method('getCreator')->willReturn($creator);\n $report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->method('getFrequency')->willReturn('daily');\n $report->method('getId')->willReturn(202);\n\n $guzzleException = $this->createMock(GuzzleException::class);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with($creator, 'ask-jiminny-report-generated', $this->anything())\n ->willThrowException($guzzleException);\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n\n $this->addToAssertionCount(1);\n }\n\n public function testHandleTracksAutomatedReportWithSingleRecipient(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $user = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('team_performance');\n $report->expects($this->once())->method('getFrequency')->willReturn('daily');\n $report->expects($this->once())->method('getId')->willReturn(303);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$user]);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $user,\n 'automated-report-generated',\n ['report_type' => 'team_performance', 'frequency' => 'daily']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Contracts\\UserContract;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass TrackAutomatedReportGeneratedEvent implements ShouldQueue\n{\n use InteractsWithQueue;\n\n private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';\n private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';\n\n public string $queue = Constants::QUEUE_DELAYABLE;\n\n public function __construct(\n private readonly UserPilotClient $userPilotClient,\n private readonly AutomatedReportsService $automatedReportsService,\n ) {\n }\n\n public function handle(AutomatedReportGenerated $event): void\n {\n if (config('services.userpilot.token') === null) {\n return;\n }\n\n $automatedReport = $event->automatedReport;\n $payload = $this->buildPayload($automatedReport);\n\n $eventName = $this->resolveEventName($automatedReport);\n\n $users = $this->resolveUsers($automatedReport);\n\n if (empty($users)) {\n Log::warning('[UserPilot] No recipients found for automated report', [\n 'report_id' => $automatedReport->getId(),\n 'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),\n ]);\n\n return;\n }\n\n Log::info('[UserPilot] Sending automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'event_name' => $eventName,\n 'recipient_count' => count($users),\n ]);\n\n try {\n foreach ($users as $user) {\n $this->userPilotClient->track($user, $eventName, $payload);\n }\n } catch (GuzzleException $e) {\n Log::error('[UserPilot] Failed to send automated report event', [\n 'report_id' => $automatedReport->getId(),\n 'error' => $e->getMessage(),\n ]);\n $this->release(3600);\n }\n }\n\n /**\n * @return array<UserContract>\n */\n private function resolveUsers(AutomatedReport $automatedReport): array\n {\n if ($automatedReport->isAskJiminnyReport()) {\n $creator = $automatedReport->getCreator();\n\n return $creator !== null ? [$creator] : [];\n }\n\n return $this->automatedReportsService->getRecipientUserObjects($automatedReport);\n }\n\n private function buildPayload(AutomatedReport $automatedReport): array\n {\n return [\n 'report_type' => $automatedReport->getType(),\n 'frequency' => $automatedReport->getFrequency(),\n ];\n }\n\n private function resolveEventName(AutomatedReport $automatedReport): string\n {\n if ($automatedReport->isAskJiminnyReport()) {\n return self::EVENT_NAME_ASK_JIMINNY_REPORT;\n }\n\n return self::EVENT_NAME_AUTOMATED_REPORT;\n }\n}\n\n+++\n\n<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Listeners\\AutomatedReports\\UserPilot;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse Jiminny\\Events\\AutomatedReports\\AutomatedReportGenerated;\nuse Jiminny\\Listeners\\AutomatedReports\\UserPilot\\TrackAutomatedReportGeneratedEvent;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse Tests\\TestCase;\n\nclass TrackAutomatedReportGeneratedEventTest extends TestCase\n{\n private UserPilotClient&MockObject $userPilotClient;\n private AutomatedReportsService&MockObject $automatedReportsService;\n\n protected function setUp(): void\n {\n parent::setUp();\n $this->userPilotClient = $this->createMock(UserPilotClient::class);\n $this->automatedReportsService = $this->createMock(AutomatedReportsService::class);\n }\n\n private function makeListener(): TrackAutomatedReportGeneratedEvent\n {\n return new TrackAutomatedReportGeneratedEvent(\n $this->userPilotClient,\n $this->automatedReportsService,\n );\n }\n\n private function makeEvent(AutomatedReport $report): AutomatedReportGenerated\n {\n return new AutomatedReportGenerated($report);\n }\n\n public function testHandleSkipsWhenUserPilotTokenIsNull(): void\n {\n config(['services.userpilot.token' => null]);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->never())->method('isAskJiminnyReport');\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksCreatorForAskJiminnyReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn($creator);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(123);\n\n $this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $creator,\n 'ask-jiminny-report-generated',\n ['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);\n $report->expects($this->once())->method('getCreator')->willReturn(null);\n $report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->expects($this->once())->method('getFrequency')->willReturn('weekly');\n $report->expects($this->once())->method('getId')->willReturn(456);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleTracksAllRecipientsForExecReport(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $userOne = $this->createMock(User::class);\n $userTwo = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(789);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$userOne, $userTwo]);\n\n $this->userPilotClient->expects($this->exactly(2))\n ->method('track')\n ->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {\n $this->assertTrue($user === $userOne || $user === $userTwo);\n $this->assertSame('automated-report-generated', $eventName);\n $this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);\n\n return null;\n });\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('exec_summary');\n $report->expects($this->once())->method('getFrequency')->willReturn('monthly');\n $report->expects($this->once())->method('getId')->willReturn(101);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->willReturn([]);\n\n $this->userPilotClient->expects($this->never())->method('track');\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n }\n\n public function testHandleDoesNotThrowOnGuzzleException(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $creator = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->method('isAskJiminnyReport')->willReturn(true);\n $report->method('getCreator')->willReturn($creator);\n $report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);\n $report->method('getFrequency')->willReturn('daily');\n $report->method('getId')->willReturn(202);\n\n $guzzleException = $this->createMock(GuzzleException::class);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with($creator, 'ask-jiminny-report-generated', $this->anything())\n ->willThrowException($guzzleException);\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\n\n $this->addToAssertionCount(1);\n }\n\n public function testHandleTracksAutomatedReportWithSingleRecipient(): void\n {\n config(['services.userpilot.token' => 'NX-token']);\n\n $user = $this->createMock(User::class);\n\n $report = $this->createMock(AutomatedReport::class);\n $report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);\n $report->expects($this->once())->method('getType')->willReturn('team_performance');\n $report->expects($this->once())->method('getFrequency')->willReturn('daily');\n $report->expects($this->once())->method('getId')->willReturn(303);\n\n $this->automatedReportsService->expects($this->once())\n ->method('getRecipientUserObjects')\n ->with($report)\n ->willReturn([$user]);\n\n $this->userPilotClient->expects($this->once())\n ->method('track')\n ->with(\n $user,\n 'automated-report-generated',\n ['report_type' => 'team_performance', 'frequency' => 'daily']\n );\n\n $listener = $this->makeListener();\n $listener->handle($this->makeEvent($report));\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,"bounds":{"left":0.24335106,"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}]...
|
8802872861699676927
|
-814333409992410365
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20738-debug-AJ-trackin Project: faVsco.js, menu
JY-20738-debug-AJ-tracking-UP, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
1
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
43
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Jiminny\Component\Queue\Constants;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Contracts\UserContract;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use Illuminate\Support\Facades\Log;
class TrackAutomatedReportGeneratedEvent implements ShouldQueue
{
use InteractsWithQueue;
private const string EVENT_NAME_AUTOMATED_REPORT = 'automated-report-generated';
private const string EVENT_NAME_ASK_JIMINNY_REPORT = 'ask-jiminny-report-generated';
public string $queue = Constants::QUEUE_DELAYABLE;
public function __construct(
private readonly UserPilotClient $userPilotClient,
private readonly AutomatedReportsService $automatedReportsService,
) {
}
public function handle(AutomatedReportGenerated $event): void
{
if (config('services.userpilot.token') === null) {
return;
}
$automatedReport = $event->automatedReport;
$payload = $this->buildPayload($automatedReport);
$eventName = $this->resolveEventName($automatedReport);
$users = $this->resolveUsers($automatedReport);
if (empty($users)) {
Log::warning('[UserPilot] No recipients found for automated report', [
'report_id' => $automatedReport->getId(),
'is_ask_jiminny' => $automatedReport->isAskJiminnyReport(),
]);
return;
}
Log::info('[UserPilot] Sending automated report event', [
'report_id' => $automatedReport->getId(),
'event_name' => $eventName,
'recipient_count' => count($users),
]);
try {
foreach ($users as $user) {
$this->userPilotClient->track($user, $eventName, $payload);
}
} catch (GuzzleException $e) {
Log::error('[UserPilot] Failed to send automated report event', [
'report_id' => $automatedReport->getId(),
'error' => $e->getMessage(),
]);
$this->release(3600);
}
}
/**
* @return array<UserContract>
*/
private function resolveUsers(AutomatedReport $automatedReport): array
{
if ($automatedReport->isAskJiminnyReport()) {
$creator = $automatedReport->getCreator();
return $creator !== null ? [$creator] : [];
}
return $this->automatedReportsService->getRecipientUserObjects($automatedReport);
}
private function buildPayload(AutomatedReport $automatedReport): array
{
return [
'report_type' => $automatedReport->getType(),
'frequency' => $automatedReport->getFrequency(),
];
}
private function resolveEventName(AutomatedReport $automatedReport): string
{
if ($automatedReport->isAskJiminnyReport()) {
return self::EVENT_NAME_ASK_JIMINNY_REPORT;
}
return self::EVENT_NAME_AUTOMATED_REPORT;
}
}
+++
<?php
declare(strict_types=1);
namespace Tests\Unit\Listeners\AutomatedReports\UserPilot;
use GuzzleHttp\Exception\GuzzleException;
use Jiminny\Events\AutomatedReports\AutomatedReportGenerated;
use Jiminny\Listeners\AutomatedReports\UserPilot\TrackAutomatedReportGeneratedEvent;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
use PHPUnit\Framework\MockObject\MockObject;
use Tests\TestCase;
class TrackAutomatedReportGeneratedEventTest extends TestCase
{
private UserPilotClient&MockObject $userPilotClient;
private AutomatedReportsService&MockObject $automatedReportsService;
protected function setUp(): void
{
parent::setUp();
$this->userPilotClient = $this->createMock(UserPilotClient::class);
$this->automatedReportsService = $this->createMock(AutomatedReportsService::class);
}
private function makeListener(): TrackAutomatedReportGeneratedEvent
{
return new TrackAutomatedReportGeneratedEvent(
$this->userPilotClient,
$this->automatedReportsService,
);
}
private function makeEvent(AutomatedReport $report): AutomatedReportGenerated
{
return new AutomatedReportGenerated($report);
}
public function testHandleSkipsWhenUserPilotTokenIsNull(): void
{
config(['services.userpilot.token' => null]);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->never())->method('isAskJiminnyReport');
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksCreatorForAskJiminnyReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn($creator);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(123);
$this->automatedReportsService->expects($this->never())->method('getRecipientUserObjects');
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$creator,
'ask-jiminny-report-generated',
['report_type' => AutomatedReportsService::TYPE_ASK_JIMINNY, 'frequency' => 'weekly']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleSkipsTrackingWhenAskJiminnyCreatorIsNull(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(true);
$report->expects($this->once())->method('getCreator')->willReturn(null);
$report->expects($this->once())->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->expects($this->once())->method('getFrequency')->willReturn('weekly');
$report->expects($this->once())->method('getId')->willReturn(456);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleTracksAllRecipientsForExecReport(): void
{
config(['services.userpilot.token' => 'NX-token']);
$userOne = $this->createMock(User::class);
$userTwo = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(789);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$userOne, $userTwo]);
$this->userPilotClient->expects($this->exactly(2))
->method('track')
->willReturnCallback(function ($user, $eventName, $payload) use ($userOne, $userTwo) {
$this->assertTrue($user === $userOne || $user === $userTwo);
$this->assertSame('automated-report-generated', $eventName);
$this->assertSame(['report_type' => 'exec_summary', 'frequency' => 'monthly'], $payload);
return null;
});
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotTrackWhenExecReportHasNoRecipients(): void
{
config(['services.userpilot.token' => 'NX-token']);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(3))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('exec_summary');
$report->expects($this->once())->method('getFrequency')->willReturn('monthly');
$report->expects($this->once())->method('getId')->willReturn(101);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->willReturn([]);
$this->userPilotClient->expects($this->never())->method('track');
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
public function testHandleDoesNotThrowOnGuzzleException(): void
{
config(['services.userpilot.token' => 'NX-token']);
$creator = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->method('isAskJiminnyReport')->willReturn(true);
$report->method('getCreator')->willReturn($creator);
$report->method('getType')->willReturn(AutomatedReportsService::TYPE_ASK_JIMINNY);
$report->method('getFrequency')->willReturn('daily');
$report->method('getId')->willReturn(202);
$guzzleException = $this->createMock(GuzzleException::class);
$this->userPilotClient->expects($this->once())
->method('track')
->with($creator, 'ask-jiminny-report-generated', $this->anything())
->willThrowException($guzzleException);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
$this->addToAssertionCount(1);
}
public function testHandleTracksAutomatedReportWithSingleRecipient(): void
{
config(['services.userpilot.token' => 'NX-token']);
$user = $this->createMock(User::class);
$report = $this->createMock(AutomatedReport::class);
$report->expects($this->exactly(2))->method('isAskJiminnyReport')->willReturn(false);
$report->expects($this->once())->method('getType')->willReturn('team_performance');
$report->expects($this->once())->method('getFrequency')->willReturn('daily');
$report->expects($this->once())->method('getId')->willReturn(303);
$this->automatedReportsService->expects($this->once())
->method('getRecipientUserObjects')
->with($report)
->willReturn([$user]);
$this->userPilotClient->expects($this->once())
->method('track')
->with(
$user,
'automated-report-generated',
['report_type' => 'team_performance', 'frequency' => 'daily']
);
$listener = $this->makeListener();
$listener->handle($this->makeEvent($report));
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
|
68812
|
1563
|
23
|
2026-04-22T06:41:53.684714+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-22/1776 /Users/lukas/.screenpipe/data/data/2026-04-22/1776840113684_m2.jpg...
|
Slack
|
engineering (Channel) - Jiminny Inc - Slack
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.0056515955,"top":0.058260176,"width":0.011968086,"height":0.028731046},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"bounds":{"left":0.0029920214,"top":0.10055866,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"bounds":{"left":0.0066489363,"top":0.13806863,"width":0.009973404,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"bounds":{"left":0.0029920214,"top":0.15482841,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"bounds":{"left":0.0076462766,"top":0.19233839,"width":0.007978723,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"bounds":{"left":0.0029920214,"top":0.20909816,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"bounds":{"left":0.004986702,"top":0.24660814,"width":0.012965426,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"bounds":{"left":0.0029920214,"top":0.26336792,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"bounds":{"left":0.0076462766,"top":0.3008779,"width":0.0076462766,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"bounds":{"left":0.0029920214,"top":0.31763768,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"bounds":{"left":0.00731383,"top":0.35514766,"width":0.008643617,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"bounds":{"left":0.0029920214,"top":0.3719074,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"bounds":{"left":0.006981383,"top":0.4094174,"width":0.008976064,"height":0.0103751},"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"role_description":"text"}]...
|
8802802765596083200
|
-8129993884726510929
|
visual_change
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
HomeDM•ActivitySlackHistoryWindowHelpQ Describe what you are looking forJiminny ... ~drandom# releasesic soha-otnce# support# thank-vous# the people of jimi..^ Direct messages.3 Aneliya Angelova, ...Ie. Aneliva Angelovaao Mario GeorgievNikolay Yankovey odor StamatovGabriela DurevaP Petko Kashinskia Vasil Vaciler.e Nikolay Nikolov• Galva DimitrovaStefka Stoyanovaa Stovan Tomovo Stoyan Taneve. Nikolay IvanovF Vec#:AppsJira Cloud• Toast# engineering9, 24• Messages©Canvase FilesMoresevenshores mubspot Excentions badkeat/app/Services/crm/Hubspot/Pagination/HubspotPaginationService.ohp inJiminny Services crm. Rubspot Pacination HuosodtPaginationService.executeSearchReauestClient error: "POSThttos:/ao1.hubaoi.com/crm/v3/obiectscontact/search' resulted in a '429 Tod"message":"You haveno"."RATE LIMIT". "cornb2b6-c (truncated..Events: 14202 State: Ongoing First Seen: 2025-14.09ArchiveNikolay Nikolov 9:40 AMWe have changed processing of webhooks from30 min to 5 min smallier batchesMessage #engineering+ AalC) UserAutomatedReoortsController.ohoaoo/Htto/Controllers/APV/UserAutomatd> Unversioned Files 9 filesPlatform Sprint 2 Q2 - Platform Te4 [JY-20372] Al Reports > Empty paZ Jiminny MCP Connector - ProductJiminny Maill(JY-20500] Batch initial sync for SFeed — iminny — Sentrv8) JiminnyPipelines - jiminny/appFormalizelT (SRD-6793] Les Mills activity type8 Search results: calendar | Jiminny8 Jiminny8 Jiminny9 liminny* Edit - Engineering - Confluence7 1wy-189091 (Part21 Automated rerSevenShores|Hubspot\Exceptions'CloudWatch | us-east-2w Usage | WindsurSevenShores\Hubspot\Exceptic XMeet - Daily - Platform+ New Tat:08MleininastteMonitoreninny.sentry.lossID: trab111t11 hours ago JSON163Sresponse = Sclient->getInstance()->getClient()->request('POST' Sendpoint, ['ison' => Spayload]):return sresponse->coArrayo} catch (\Exception Se) {167if (Sclient->isUnauthorizedException(Se)) ‹Sthis->logger->warning('[Hubspot) Got 401 during pagination, attempting token refresh'. [clientObiect Jiminny Services Crm Hubspot Clientendpointhttos://aoi.hubaoi.com/crm/v3/obiects/contact/search..payload• filterGroups: l• 1 item ?› properties: [ 14 items ].v sorts:>< 2 items }Obiect Jiminny Services Crm Hubspot Paqination PaginationState/app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:51 in Jiminny|Services\Crm\Hubspot\Pagination\HubspotPaginationService:getPaginatedDataGeneratorSpayload = Sthis->handlePaginationStrategy(Spayload, SdefaultFilter, Sstate, SresultsPerPage, SteamId)=Sthis->validateTokent fNeeded Scllent, sstate,usteep (sderaySpage = Sthis->executeSearchRequest(Sclient, Sendpoint, Spayload, Sstate):Sstate->setTotal(Spage['total'] ?? 0):Sthis->updateLastRecordId(Spage, Sstate):II Safelv iterate over results with null checkcLientObiect Jiminny\Services\Crm\Hubspot\ClientoletDolaarttnulloffsetpayloacfilterGroups: 1•1 1tem ?.•<1item ?• nronortioc. " 14 ¿tome 140• : Daily - Platform - in 4 m100% Cwea zz Aor 9.41:00Jump to: HighlightsStack Trace TraceMerged IssuesView•@ InApp(***Jann/Services/Crm/Hubsnot /Client nhn:04 in Jiminnv|Servicos) Crm| Hubsnot) Client..aetPadinatedNatalHin Annie Ann...
|
68810
|
|
75625
|
1886
|
46
|
2026-04-24T06:41:45.021455+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777012905021_m2.jpg...
|
Slack
|
platform-inner-team (Channel) - Jiminny Inc - Slac platform-inner-team (Channel) - Jiminny Inc - Slack...
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.0056515955,"top":0.058260176,"width":0.011968086,"height":0.028731046},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"bounds":{"left":0.0029920214,"top":0.10055866,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"bounds":{"left":0.0066489363,"top":0.13806863,"width":0.009973404,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"bounds":{"left":0.0029920214,"top":0.15482841,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"bounds":{"left":0.0076462766,"top":0.19233839,"width":0.007978723,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"bounds":{"left":0.0029920214,"top":0.20909816,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"bounds":{"left":0.004986702,"top":0.24660814,"width":0.012965426,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"bounds":{"left":0.0029920214,"top":0.26336792,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"bounds":{"left":0.0076462766,"top":0.3008779,"width":0.0076462766,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"bounds":{"left":0.0029920214,"top":0.31763768,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"bounds":{"left":0.00731383,"top":0.35514766,"width":0.008643617,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"bounds":{"left":0.0029920214,"top":0.3719074,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"bounds":{"left":0.006981383,"top":0.4094174,"width":0.008976064,"height":0.0103751},"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"role_description":"text"}]...
|
8802802765596083200
|
-8129993884726510929
|
app_switch
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
DMSActivityMorePhpStormViewINavigareJiminny...vXStarredi• jiminny-x-integrati..8 platform-inner-teamE) Channelsic al-chaoter# ai-teamu alerts# backend# c-learning-peoplei confusion-clinic# curiosity labadeal-insichts-dev# engineering# frontend# general# infra-changes# jiminny-bg• people-with-copilo…..8 people-with-zoom-# platform-team# platform-tickets# product_launches# random# releases# soha-office# support# thank-yous# the people of iimi.CodeLaravelKeractorTOOIS• plattorm-inner-...Q 10MessagesChannel OverviewMore1356 |acc*-1120 046 ~89.7 MB~/8MbShow morecomments) jiminny/app Apr 22nd Added by GitHubNikolay Ivanov 3:24 PM•някои нешо ла е настроивал по gitnupachons. Почна ла прави къмити вместо менбез ла съм му разрешевал:https://github.com/lminnv/app/pull//1200//changes/a0814212108571838241dced451f/5062/be581bИли нешо аз не разбирам?AAe 0 8 20 replies Last reply 18.Nikolay Yankov 3:50 PMreplied to a uhread: някои нещо да е насто..лол, ами предлагам май да му забраним дакьмитва... не знампускам кьм всички ла вилятikolav Yankov 9.38AMШе се забавя за лейлито. Започнете дез мен.Message & platform-inner-team+ AalWindowmelpFV faVsco.js( #12011 on JY-20157-AJ-report-not-send-notification vProiect© TrackAutomatedReportGeneratedEventTest.php© SendReportNotGeneratedMailJobTest.php•.gitignoree audio.wavc) AutomatedReportsCommand lest.onpAutomateakeporscommana.ong= custom.logE hubspot-journal-poll.logE laravel.log< phpunit.xml.I ttt.js= oauth-private.kev© Automatedreporisservicelest.phgnatedreporisserviceActivitiescountl est.onpc ReporiNotgenerated.ohoC) ReportWithAttachment.phoC) RequestGenerateAskJiminnyReportJobTest.phc) RequestGenerateAskJiminnyReportJob.ohp(C) SendReportNotGeneratedMailJob.phoC) SendReportMailJob.php= oauth-public.key= storageC SendReportMailobTest.oho© TranscriptionAiSummaryReadyEvent.php= supervisord.pid(C) AutomatedReportGenerated.ohvC) CreateDialerActivityEvent.ohowtext-relav..son(C) CreateNudaeCreatedFvent.ohnl© CreateActivityLoggedEvent.php© TrackProviderInstalledEvent.phptests→ Feature© UserPilotClient.php(C) PlanhatActivityListener.onpphp api_v2.php>M Intearation› Servicesclass Automaredkeporcsservicekeporcbenerac1onlest excenas lescuase46Av 36v NUnit> MActionsM Comnonent142* Test calculateFromAndToDate method with one-off frequency> M Confidurationv Mconsolepublic function testCalculateFromAndToDateWith0ne0ffFrequency: void{...}v D Commands> D ActivitiesD Crm› D ElasticsearchD Reports©) AutomatedReportsCommand© ImportUsersFromCsvFileTest.ph> C Contracts> C Domain>ODTO> @ Enums> C Events> 0 Exceptions162I42* Test calculateFromAndToDate method with weekly frequency165 %public function testCalculateFromAndToDateWithWeeklyFrequencyO: void// Mock reportSreport = Sthis->createMock( originalClassName: AutomatedReport::class):Sreport->method constraint'getrrequency'->w1LLReturn value: AutomatedReportsserv1ce*Freeze time tor testindcarbon::set estrow carbon::porsed uime: 2025-02-15 14158188 90—53→tixtures> M Guards// Access private method using reflectionsresult = self..invokePrivatelethodcmdName: 'calculateFromAndioDate'. Sthis->ge.› → Heloers> D Http> IntearationsVerify resultcarhon: cllass. Sresut"Fromlate"D.>D Interactionsv Mhlohs> Activity• M AiAutomationisthis-sassentiinstancelfd exoected• carhon: cllass. Sresut""tolate"n.Sthis-sassentFqualsd exoe2023-02-05 00:00:00' , Sresult['fromDate' ] ->format('VSthis->assentFqualsd exoected'2023-02-11 23:59:59', Sresult['toDate']->format('Y-mn_62— 63• M AudioReset frozen timev MAutomatedRenortsCanhon• • cotToctlowo•© CreateResultsTest.php© RequestGenerateAskJiminnyRer© RequestGenerateReportJobTest© SendReportJobTest.php@ SendReportMailJobTest.phpi CondDonortNotConoratodMail.la* Test calculateFromAndToDate method with monthly frequencu=68public function testCalculateFromAndToDateWithMonthlyFrequencyO: void{...}Dally - Platorm • In 4m100% LzFri 24 Apr 9:41:44E custom.log x = laravel.logA SF [jiminny@localhost]# hs_local yiminny @localnost« console (PROD)© DealsRepository.php# console [eu)ee ee- '2023-02-08 00:00:00'+'2023-02-05 00:00:00'A console [STAGING]/home/circleci/proiect/tests/Unit/Services/Kiosk/AutomatedReports/AutomatedReportsServiceReportGenerationTest.php:1864) Tests Unit\Services Kiosk AutomatedReports\AutomatedReportsServiceReportGenerationTest::testCalculateFromAndToDateWithMonthlyFrequenFailed asserting that two strings are equal,•-- Expected+++ Actual- '2023-01-15 00:00:00'+:2023-01-01 00:00:00'home/circleci/oroiect/tests/Unit/Services/Klosk/AutomatedReoorts/AutomatedRenortsServiceRenortGenerationTest.oho: 2055) Tests\Unit\Services Kiosk \AutomatedReports \AutomatedReportsServiceReportGenerationTest::testCalculateFromAndToDateWithQuarterlyFrequFailed asserting that two strings are equal,--- Eynectedl+++ Actuald 0д- ' 2022-11-15 00:00:00'412029.19-01 00-00-901/home/circleci/project/tests/Unit/Services/Kiosk/AutomatedReports/AutomatedReportsServiceReportGenerationTest.php: 2366) Tests\Unit\Services Kiosk AutomatedReports\AutomatedReportsServiceReportGenerationTest::testGetGenerateReportPayloadWithWeeklyFrequralled asserting that two strinas are equau--- Expected+++ Actualee ee- 2026-01-13700:00:00+00:00'+ 2026-01-11700:00:00+00:00'home/circleci/oronect/tests/Unit/Services/Kiosk/AutomatedReoorts/AutomatedRenortsServiceReportGenerationTest.ono.77:)Tests \Unit\Services\Kiosk\AutomatedReports\AutomatedReportsServiceReportGenerationTest::testGetGenerateReportPayLoadWithMonthlyFrecFalled asserting that twostrinas are equal--- Expected*** Actuallc ce-12025-12-20700-00:00÷00•001+12925-12-A1700•00:00+00:00'Whomo/cindloci/naninat/tostc/Mnit/Soaviicos/MinckAutomatodRonontc/AutomatadPonantcSoawiicoRonontfonenat.ionTost_nhn..81l8) Tests\Unit\Services\Kiosk\AutomatedReports\AutomatedReportsServiceReportGenerationTe# 2 files committedFailed asserting that two strings are egual.JY-2015/ Tix Tallina tests--- ExpectedEdit Commit Messaae.WN Windsurf Toams 12-6UTF.8io 4 spaces...
|
NULL
|
|
72156
|
1751
|
7
|
2026-04-22T15:06:50.700399+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-22/1776 /Users/lukas/.screenpipe/data/data/2026-04-22/1776870410700_m2.jpg...
|
Slack
|
Petko Kashinski (DM) - Jiminny Inc - 2 new items - Petko Kashinski (DM) - Jiminny Inc - 2 new items - Slack...
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
c-learning-people
confusion-clinic
curiosity_lab
deal-insights-dev
engineering
frontend
general
infra-changes
jiminny-bg
people-with-copilot-licences
people-with-zoom-phone-licences
platform-team
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Petko Kashinski
Aneliya Angelova
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Nikolay Yankov
Nikolay Nikolov
Mario Georgiev
Todor Stamatov
Gabriela Dureva
Vasil Vasilev
Galya Dimitrova
Stefka Stoyanova
Stoyan Tanev
Nikolay Ivanov
Toast
Jira Cloud
Google Calendar
Unread mentions
Messages
Messages
Add canvas
Add canvas
Files
Files
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Lukas Kovalik
Yesterday at 1:51:29 PM
1:51 PM
ок
Yesterday at 1:51:46 PM
1:51
automated-reports-track-interest
нещо такава
1 reaction, react with white check mark emoji
1
Add reaction…
Petko Kashinski
Yesterday at 1:51:48 PM
1:51 PM
Аз от там си правя автоматизация и казвам на полето да отиде на 'true', ако сме го получили в payload
(edited)
Yesterday at 1:52:07 PM
1:52
okay
Yesterday at 1:52:10 PM
1:52
Наистина за мен няма значение
Lukas Kovalik
Yesterday at 1:52:19 PM
1:52 PM
добре, мерси
Petko Kashinski
Yesterday at 1:52:32 PM
1:52 PM
Само кажи като го направиш за да знам на какво си се спрял
Lukas Kovalik
Yesterday at 1:53:00 PM
1:53 PM
има ли всъщност тестова среда за planhat или само прод
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Petko Kashinski
Yesterday at 1:53:35 PM
1:53 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
Yesterday at 1:53:35 PM
1:53
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Yesterday at 1:53:44 PM
1:53
Аз съм от ония лудите дето тестват само на прод
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Yesterday at 1:53:45 PM
1:53
хахахха
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
Yesterday at 1:54:17 PM
1:54 PM
аз не съм чувал за такава но не съм и работил по planhat
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Yesterday at 1:54:45 PM
1:54
ок мерси, ще ти пиша, или в тикет направо когато сме готови
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Petko Kashinski
Yesterday at 1:56:12 PM
1:56 PM
oks thx
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Petko Kashinski
Today at 4:48:19 PM
4:48 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
New
Today at 4:48:25 PM
4:48
Имаш ли минутка за бърз хъдъл :?
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Conversation marked as unread from this message
Channel...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":14,"bounds":{"left":0.0056515955,"top":0.058260176,"width":0.011968086,"height":0.028731046},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"bounds":{"left":0.0029920214,"top":0.10055866,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"bounds":{"left":0.0066489363,"top":0.13806863,"width":0.009973404,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"bounds":{"left":0.0029920214,"top":0.15482841,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"bounds":{"left":0.0076462766,"top":0.19233839,"width":0.007978723,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"bounds":{"left":0.0029920214,"top":0.20909816,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"bounds":{"left":0.004986702,"top":0.24660814,"width":0.012965426,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"bounds":{"left":0.0029920214,"top":0.26336792,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"bounds":{"left":0.0076462766,"top":0.3008779,"width":0.0076462766,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"bounds":{"left":0.0029920214,"top":0.31763768,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"bounds":{"left":0.00731383,"top":0.35514766,"width":0.008643617,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"bounds":{"left":0.0029920214,"top":0.3719074,"width":0.017287234,"height":0.054269753},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"bounds":{"left":0.006981383,"top":0.4094174,"width":0.008976064,"height":0.0103751},"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":"deal-insights-dev","depth":23,"bounds":{"left":0.042220745,"top":0.09736632,"width":0.03723404,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"bounds":{"left":0.042220745,"top":0.11971269,"width":0.025598405,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":23,"bounds":{"left":0.042220745,"top":0.14205906,"width":0.018949468,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"bounds":{"left":0.042220745,"top":0.16440542,"width":0.015957447,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"infra-changes","depth":23,"bounds":{"left":0.042220745,"top":0.1867518,"width":0.029587766,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"bounds":{"left":0.042220745,"top":0.20909816,"width":0.022938829,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"people-with-copilot-licences","depth":23,"bounds":{"left":0.042220745,"top":0.23144454,"width":0.045212764,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"people-with-zoom-phone-licences","depth":23,"bounds":{"left":0.042220745,"top":0.25379092,"width":0.045877658,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"platform-team","depth":23,"bounds":{"left":0.042220745,"top":0.27613726,"width":0.03125,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"bounds":{"left":0.042220745,"top":0.29848364,"width":0.034906916,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"bounds":{"left":0.042220745,"top":0.32083002,"width":0.03856383,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"bounds":{"left":0.042220745,"top":0.34317636,"width":0.01662234,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"bounds":{"left":0.042220745,"top":0.36552274,"width":0.018284574,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"bounds":{"left":0.042220745,"top":0.38786912,"width":0.024268618,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"bounds":{"left":0.042220745,"top":0.4102155,"width":0.016954787,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"bounds":{"left":0.042220745,"top":0.43256184,"width":0.024268618,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"bounds":{"left":0.042220745,"top":0.45490822,"width":0.04488032,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tomov","depth":23,"bounds":{"left":0.042220745,"top":0.50758183,"width":0.030585106,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"Petko Kashinski","depth":23,"bounds":{"left":0.042220745,"top":0.52992815,"width":0.034242023,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"bounds":{"left":0.042220745,"top":0.5522745,"width":0.03756649,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"bounds":{"left":0.042220745,"top":0.5746209,"width":0.03756649,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"bounds":{"left":0.07945479,"top":0.5746209,"width":0.0063164895,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"bounds":{"left":0.08211436,"top":0.5746209,"width":0.014295213,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"bounds":{"left":0.09607713,"top":0.59217876,"width":0.0003324468,"height":0.0007980846},"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":23,"bounds":{"left":0.09607713,"top":0.59217876,"width":0.0003324468,"height":0.0007980846},"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"bounds":{"left":0.042220745,"top":0.5969673,"width":0.032912236,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":23,"bounds":{"left":0.042220745,"top":0.61931366,"width":0.034242023,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"Mario Georgiev","depth":23,"bounds":{"left":0.042220745,"top":0.64166003,"width":0.033909574,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"Todor Stamatov","depth":23,"bounds":{"left":0.042220745,"top":0.6640064,"width":0.034242023,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"Gabriela Dureva","depth":23,"bounds":{"left":0.042220745,"top":0.6863527,"width":0.03523936,"height":0.014365523},"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"bounds":{"left":0.042220745,"top":0.7086991,"width":0.026263298,"height":0.0007980846},"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"bounds":{"left":0.042220745,"top":0.7086991,"width":0.034906916,"height":0.0007980846},"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":23,"bounds":{"left":0.042220745,"top":0.7086991,"width":0.03756649,"height":0.0007980846},"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tanev","depth":23,"bounds":{"left":0.042220745,"top":0.7086991,"width":0.028922873,"height":0.0007980846},"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":23,"bounds":{"left":0.042220745,"top":0.7086991,"width":0.031914894,"height":0.0007980846},"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"bounds":{"left":0.042220745,"top":0.7086991,"width":0.011968086,"height":0.0007980846},"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"bounds":{"left":0.042220745,"top":0.7086991,"width":0.021609042,"height":0.0007980846},"role_description":"text"},{"role":"AXStaticText","text":"Google Calendar","depth":23,"bounds":{"left":0.042220745,"top":0.7086991,"width":0.03025266,"height":0.0007980846},"role_description":"text"},{"role":"AXButton","text":"Unread mentions","depth":17,"bounds":{"left":0.035904255,"top":0.68076617,"width":0.048204787,"height":0.022346368},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Messages","depth":17,"bounds":{"left":0.10206117,"top":0.09177973,"width":0.030585106,"height":0.030327214},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":19,"bounds":{"left":0.111369684,"top":0.10055866,"width":0.01861702,"height":0.012769354},"role_description":"text"},{"role":"AXRadioButton","text":"Add canvas","depth":18,"bounds":{"left":0.13397606,"top":0.09177973,"width":0.033909574,"height":0.030327214},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add canvas","depth":20,"bounds":{"left":0.14328457,"top":0.10055866,"width":0.021941489,"height":0.012769354},"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":17,"bounds":{"left":0.16921543,"top":0.09177973,"width":0.020944148,"height":0.030327214},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":19,"bounds":{"left":0.17852394,"top":0.10055866,"width":0.008976064,"height":0.012769354},"role_description":"text"},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":17,"bounds":{"left":0.19115691,"top":0.09177973,"width":0.010970744,"height":0.030327214},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":17,"bounds":{"left":0.096409574,"top":0.0518755,"width":0.015625,"height":0.0007980846},"role_description":"text"},{"role":"AXStaticText","text":"List","depth":17,"bounds":{"left":0.096409574,"top":0.0518755,"width":0.0076462766,"height":0.0007980846},"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":17,"bounds":{"left":0.096409574,"top":0.0518755,"width":0.013962766,"height":0.0007980846},"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":22,"bounds":{"left":0.14660904,"top":0.12689546,"width":0.032579787,"height":0.022346368},"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":"Yesterday at 1:51:29 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:51 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ок","depth":24,"role_description":"text"},{"role":"AXLink","text":"Yesterday at 1:51:46 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:51","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"automated-reports-track-interest","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"нещо такава","depth":24,"role_description":"text"},{"role":"AXCheckBox","text":"1 reaction, react with white check mark emoji","depth":24,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":25,"role_description":"text"},{"role":"AXButton","text":"Add reaction…","depth":24,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Petko Kashinski","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":"Yesterday at 1:51:48 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:51 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Аз от там си правя автоматизация и казвам на полето да отиде на 'true', ако сме го получили в payload","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"(edited)","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"Yesterday at 1:52:07 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:52","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"okay","depth":24,"role_description":"text"},{"role":"AXLink","text":"Yesterday at 1:52:10 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:52","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Наистина за мен няма значение","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":"Yesterday at 1:52:19 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:52 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"добре, мерси","depth":24,"role_description":"text"},{"role":"AXButton","text":"Petko Kashinski","depth":23,"bounds":{"left":0.11801862,"top":0.11572227,"width":0.035904255,"height":0.015163607},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.15392287,"top":0.11572227,"width":0.0026595744,"height":0.013567438},"role_description":"text"},{"role":"AXLink","text":"Yesterday at 1:52:32 PM","depth":23,"bounds":{"left":0.15658244,"top":0.11731844,"width":0.014960106,"height":0.011173184},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:52 PM","depth":24,"bounds":{"left":0.15658244,"top":0.11731844,"width":0.014960106,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"Само кажи като го направиш за да знам на какво си се спрял","depth":24,"bounds":{"left":0.11801862,"top":0.13248204,"width":0.0987367,"height":0.031923383},"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":23,"bounds":{"left":0.11801862,"top":0.17238627,"width":0.030917553,"height":0.017557861},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.14860372,"top":0.17398244,"width":0.0029920214,"height":0.014365523},"role_description":"text"},{"role":"AXLink","text":"Yesterday at 1:53:00 PM","depth":23,"bounds":{"left":0.1512633,"top":0.1763767,"width":0.015292553,"height":0.011173184},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:53 PM","depth":24,"bounds":{"left":0.1512633,"top":0.1763767,"width":0.015292553,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"има ли всъщност тестова среда за planhat или само прод","depth":24,"bounds":{"left":0.11801862,"top":0.1915403,"width":0.09674202,"height":0.031923383},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"bounds":{"left":0.13730054,"top":0.15881884,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.14793883,"top":0.15881884,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.15857713,"top":0.15881884,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.16921543,"top":0.15881884,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"bounds":{"left":0.17985372,"top":0.15881884,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"bounds":{"left":0.22340426,"top":0.15881884,"width":0.0003324468,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"bounds":{"left":0.22340426,"top":0.15881884,"width":0.0003324468,"height":0.025538707},"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,"bounds":{"left":0.22340426,"top":0.15881884,"width":0.0003324468,"height":0.025538707},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Petko Kashinski","depth":23,"bounds":{"left":0.11801862,"top":0.23144454,"width":0.035904255,"height":0.017557861},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.15392287,"top":0.2330407,"width":0.0026595744,"height":0.014365523},"role_description":"text"},{"role":"AXLink","text":"Yesterday at 1:53:35 PM","depth":23,"bounds":{"left":0.15658244,"top":0.23543495,"width":0.014960106,"height":0.011173184},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:53 PM","depth":24,"bounds":{"left":0.15658244,"top":0.23543495,"width":0.014960106,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"Ох, много добър въпрос","depth":24,"bounds":{"left":0.11801862,"top":0.25059855,"width":0.055851065,"height":0.014365523},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"bounds":{"left":0.13730054,"top":0.21787709,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.14793883,"top":0.21787709,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.15857713,"top":0.21787709,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.16921543,"top":0.21787709,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"bounds":{"left":0.17985372,"top":0.21787709,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"bounds":{"left":0.22340426,"top":0.21787709,"width":0.0003324468,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"bounds":{"left":0.22340426,"top":0.21787709,"width":0.0003324468,"height":0.025538707},"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,"bounds":{"left":0.22340426,"top":0.21787709,"width":0.0003324468,"height":0.025538707},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Yesterday at 1:53:35 PM","depth":24,"bounds":{"left":0.107380316,"top":0.27693537,"width":0.007978723,"height":0.011173184},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:53","depth":25,"bounds":{"left":0.107380316,"top":0.27693537,"width":0.007978723,"height":0.011173184},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"bounds":{"left":0.13730054,"top":0.24980047,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.14793883,"top":0.24980047,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.15857713,"top":0.24980047,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.16921543,"top":0.24980047,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"bounds":{"left":0.17985372,"top":0.24980047,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"bounds":{"left":0.22340426,"top":0.24980047,"width":0.0003324468,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"bounds":{"left":0.22340426,"top":0.24980047,"width":0.0003324468,"height":0.025538707},"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,"bounds":{"left":0.22340426,"top":0.24980047,"width":0.0003324468,"height":0.025538707},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Yesterday at 1:53:44 PM","depth":24,"bounds":{"left":0.107380316,"top":0.30885875,"width":0.007978723,"height":0.011173184},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:53","depth":25,"bounds":{"left":0.107380316,"top":0.30885875,"width":0.007978723,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"Аз съм от ония лудите дето тестват само на прод","depth":24,"bounds":{"left":0.11801862,"top":0.3064645,"width":0.10172872,"height":0.031923383},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"bounds":{"left":0.13730054,"top":0.28172386,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.14793883,"top":0.28172386,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.15857713,"top":0.28172386,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.16921543,"top":0.28172386,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"bounds":{"left":0.17985372,"top":0.28172386,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"bounds":{"left":0.22340426,"top":0.28172386,"width":0.0003324468,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"bounds":{"left":0.22340426,"top":0.28172386,"width":0.0003324468,"height":0.025538707},"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,"bounds":{"left":0.22340426,"top":0.28172386,"width":0.0003324468,"height":0.025538707},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Yesterday at 1:53:45 PM","depth":24,"bounds":{"left":0.107380316,"top":0.35035914,"width":0.007978723,"height":0.011173184},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:53","depth":25,"bounds":{"left":0.107380316,"top":0.35035914,"width":0.007978723,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"хахахха","depth":24,"bounds":{"left":0.11801862,"top":0.34796488,"width":0.017287234,"height":0.014365523},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"bounds":{"left":0.13730054,"top":0.32322428,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.14793883,"top":0.32322428,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.15857713,"top":0.32322428,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.16921543,"top":0.32322428,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"bounds":{"left":0.17985372,"top":0.32322428,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"bounds":{"left":0.22340426,"top":0.32322428,"width":0.0003324468,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"bounds":{"left":0.22340426,"top":0.32322428,"width":0.0003324468,"height":0.025538707},"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,"bounds":{"left":0.22340426,"top":0.32322428,"width":0.0003324468,"height":0.025538707},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Lukas Kovalik","depth":23,"bounds":{"left":0.11801862,"top":0.37031126,"width":0.030917553,"height":0.017557861},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.14860372,"top":0.3719074,"width":0.0029920214,"height":0.014365523},"role_description":"text"},{"role":"AXLink","text":"Yesterday at 1:54:17 PM","depth":23,"bounds":{"left":0.1512633,"top":0.37430167,"width":0.015292553,"height":0.011173184},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:54 PM","depth":24,"bounds":{"left":0.1512633,"top":0.37430167,"width":0.015292553,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"аз не съм чувал за такава но не съм и работил по planhat","depth":24,"bounds":{"left":0.11801862,"top":0.38946527,"width":0.08577128,"height":0.031923383},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"bounds":{"left":0.13730054,"top":0.3567438,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.14793883,"top":0.3567438,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.15857713,"top":0.3567438,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.16921543,"top":0.3567438,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"bounds":{"left":0.17985372,"top":0.3567438,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"bounds":{"left":0.22340426,"top":0.3567438,"width":0.0003324468,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"bounds":{"left":0.22340426,"top":0.3567438,"width":0.0003324468,"height":0.025538707},"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,"bounds":{"left":0.22340426,"top":0.3567438,"width":0.0003324468,"height":0.025538707},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Yesterday at 1:54:45 PM","depth":24,"bounds":{"left":0.107380316,"top":0.43335995,"width":0.007978723,"height":0.011173184},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:54","depth":25,"bounds":{"left":0.107380316,"top":0.43335995,"width":0.007978723,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"ок мерси, ще ти пиша, или в тикет направо когато сме готови","depth":24,"bounds":{"left":0.11801862,"top":0.4309657,"width":0.09940159,"height":0.031923383},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"bounds":{"left":0.13730054,"top":0.40622506,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.14793883,"top":0.40622506,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.15857713,"top":0.40622506,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.16921543,"top":0.40622506,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"bounds":{"left":0.17985372,"top":0.40622506,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"bounds":{"left":0.22340426,"top":0.40622506,"width":0.0003324468,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"bounds":{"left":0.22340426,"top":0.40622506,"width":0.0003324468,"height":0.025538707},"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,"bounds":{"left":0.22340426,"top":0.40622506,"width":0.0003324468,"height":0.025538707},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Petko Kashinski","depth":23,"bounds":{"left":0.11801862,"top":0.4708699,"width":0.035904255,"height":0.017557861},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.15392287,"top":0.47246608,"width":0.0026595744,"height":0.014365523},"role_description":"text"},{"role":"AXLink","text":"Yesterday at 1:56:12 PM","depth":23,"bounds":{"left":0.15658244,"top":0.47486034,"width":0.014960106,"height":0.011173184},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:56 PM","depth":24,"bounds":{"left":0.15658244,"top":0.47486034,"width":0.014960106,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"oks thx","depth":24,"bounds":{"left":0.11801862,"top":0.49002394,"width":0.015957447,"height":0.014365523},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"bounds":{"left":0.13730054,"top":0.45730248,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.14793883,"top":0.45730248,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.15857713,"top":0.45730248,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.16921543,"top":0.45730248,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"bounds":{"left":0.17985372,"top":0.45730248,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"bounds":{"left":0.22340426,"top":0.45730248,"width":0.0003324468,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"bounds":{"left":0.22340426,"top":0.45730248,"width":0.0003324468,"height":0.025538707},"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,"bounds":{"left":0.22340426,"top":0.45730248,"width":0.0003324468,"height":0.025538707},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Jump to date","depth":22,"bounds":{"left":0.15026596,"top":0.5203512,"width":0.025265958,"height":0.022346368},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Petko Kashinski","depth":23,"bounds":{"left":0.11801862,"top":0.5514765,"width":0.035904255,"height":0.017557861},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.15392287,"top":0.55307263,"width":0.0026595744,"height":0.014365523},"role_description":"text"},{"role":"AXLink","text":"Today at 4:48:19 PM","depth":23,"bounds":{"left":0.15658244,"top":0.5554669,"width":0.014960106,"height":0.011173184},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:48 PM","depth":24,"bounds":{"left":0.15658244,"top":0.5554669,"width":0.014960106,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"Лукас","depth":24,"bounds":{"left":0.11801862,"top":0.5706305,"width":0.013630319,"height":0.014365523},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"bounds":{"left":0.13730054,"top":0.53790903,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.14793883,"top":0.53790903,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.15857713,"top":0.53790903,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.16921543,"top":0.53790903,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"bounds":{"left":0.17985372,"top":0.53790903,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"bounds":{"left":0.22340426,"top":0.53790903,"width":0.0003324468,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"bounds":{"left":0.22340426,"top":0.53790903,"width":0.0003324468,"height":0.025538707},"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,"bounds":{"left":0.22340426,"top":0.53790903,"width":0.0003324468,"height":0.025538707},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"New","depth":21,"bounds":{"left":0.21343085,"top":0.5826017,"width":0.00930851,"height":0.012769354},"role_description":"text"},{"role":"AXLink","text":"Today at 4:48:25 PM","depth":24,"bounds":{"left":0.107380316,"top":0.5969673,"width":0.007978723,"height":0.011173184},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:48","depth":25,"bounds":{"left":0.107380316,"top":0.5969673,"width":0.007978723,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"Имаш ли минутка за бърз хъдъл :?","depth":24,"bounds":{"left":0.11801862,"top":0.594573,"width":0.07978723,"height":0.014365523},"role_description":"text"},{"role":"AXCheckBox","text":"React with white_check_mark","depth":25,"bounds":{"left":0.13696809,"top":0.5706305,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.14760639,"top":0.5706305,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.15824468,"top":0.5706305,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.16888298,"top":0.5706305,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply in thread","depth":25,"bounds":{"left":0.17952128,"top":0.5706305,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward message…","depth":25,"bounds":{"left":0.19015957,"top":0.5706305,"width":0.010638298,"height":0.025538707},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Save for later","depth":25,"bounds":{"left":0.20079787,"top":0.5706305,"width":0.010638298,"height":0.025538707},"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,"bounds":{"left":0.21143617,"top":0.5706305,"width":0.010638298,"height":0.025538707},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"","depth":23,"bounds":{"left":0.10372341,"top":0.6272945,"width":0.118351065,"height":0.030327214},"value":"","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Conversation marked as unread from this message","depth":11,"bounds":{"left":0.0,"top":0.7126895,"width":0.02825798,"height":0.0007980846},"role_description":"text"},{"role":"AXStaticText","text":"Channel","depth":11,"bounds":{"left":0.0,"top":0.7126895,"width":0.017287234,"height":0.0007980846},"role_description":"text"}]...
|
8802726273870990778
|
-1285331486997460650
|
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
deal-insights-dev
engineering
frontend
general
infra-changes
jiminny-bg
people-with-copilot-licences
people-with-zoom-phone-licences
platform-team
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Petko Kashinski
Aneliya Angelova
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Nikolay Yankov
Nikolay Nikolov
Mario Georgiev
Todor Stamatov
Gabriela Dureva
Vasil Vasilev
Galya Dimitrova
Stefka Stoyanova
Stoyan Tanev
Nikolay Ivanov
Toast
Jira Cloud
Google Calendar
Unread mentions
Messages
Messages
Add canvas
Add canvas
Files
Files
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Lukas Kovalik
Yesterday at 1:51:29 PM
1:51 PM
ок
Yesterday at 1:51:46 PM
1:51
automated-reports-track-interest
нещо такава
1 reaction, react with white check mark emoji
1
Add reaction…
Petko Kashinski
Yesterday at 1:51:48 PM
1:51 PM
Аз от там си правя автоматизация и казвам на полето да отиде на 'true', ако сме го получили в payload
(edited)
Yesterday at 1:52:07 PM
1:52
okay
Yesterday at 1:52:10 PM
1:52
Наистина за мен няма значение
Lukas Kovalik
Yesterday at 1:52:19 PM
1:52 PM
добре, мерси
Petko Kashinski
Yesterday at 1:52:32 PM
1:52 PM
Само кажи като го направиш за да знам на какво си се спрял
Lukas Kovalik
Yesterday at 1:53:00 PM
1:53 PM
има ли всъщност тестова среда за planhat или само прод
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Petko Kashinski
Yesterday at 1:53:35 PM
1:53 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
Yesterday at 1:53:35 PM
1:53
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Yesterday at 1:53:44 PM
1:53
Аз съм от ония лудите дето тестват само на прод
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Yesterday at 1:53:45 PM
1:53
хахахха
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
Yesterday at 1:54:17 PM
1:54 PM
аз не съм чувал за такава но не съм и работил по planhat
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Yesterday at 1:54:45 PM
1:54
ок мерси, ще ти пиша, или в тикет направо когато сме готови
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Petko Kashinski
Yesterday at 1:56:12 PM
1:56 PM
oks thx
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Petko Kashinski
Today at 4:48:19 PM
4:48 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
New
Today at 4:48:25 PM
4:48
Имаш ли минутка за бърз хъдъл :?
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Conversation marked as unread from this message
Channel
ActivityMoreSlackcalVIewMistonWindowHelp@ Describe what you are looking forJiminny...# deal-insights-dev# engineering# frontend# general# infra-changes# jiminny-bg8 people-with-copilo...8 people-with-zoom-...# platform-team# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous#t the people of iimi.o- Direct messages8?. Stoyan Tomov. Petko KashinskiA. Aneliya AngelovaB Aneliya Angelova, ...R.. Nikolay YankovP. Nikolay Nikolov&i. Mario Georgiev%: Todor Stamatov©. Petko KashinskiMessagest Add canvasUr FilesСамо кажи кіYesterday ~ лш за да знам наLukas Kovalik 1:53PMима ли всьщност тестова среда за planhatили само продіPetko Kashinski 1:53 PMОх, много добър въпросАз съм от ония лудите дето тестват само напродyaxaxyaLukas Kovallik 1:54 PMаз не съм чувал за такава но не съм иnaбоtиn no nlanharок мерси, ще ти пиша, или в тикет направокогато сме готовиPetko Kashinski 1:56 PMoks thyPetko Kashinski 4:48 PMЛукасo9 wG4:48 Имаш ли минутка за бърз хъдьл :/Message Petko Kasf[nski+ Aa Ireports.tJobtest extends Te(MockObject $reportsService&Mock0bject$prophetClient;act $logger;SurlGenerator;nockubTect sTobb1spaTx: Auto÷ 0 recordir25389221 off25389220 off• • 0SevenShores|Hubspot|Exceptions(UY-20372) Al Reports > Empty paZ Jiminny MCP Connector - Produc© Jiminny* Workers | DatadogPull requests • jiminny/app(JY-20728) (HubSpot] Find the roc• JY-9712 | Nuges to expire after oni9 Jiminni@ CloudWatch | us-east-2v Your 'Not enpough activities" repd* Jiminny MCP Connector - Prod X_ New Tabv Google GeminiJiminny MCPConnectorShow thinking vThank you for sharing the draft PRD for theJiminny MCP Connector. It looks like a highlystrategic initiative to transition Jiminny from astandalone platform into a foundational datalayer for Al-driven revenue workflows.Here is a quick breakdown of the document as itcurrenty stanes.Executive Summary• Core Objective: Build an MCP-based AlKnowledge Connector to expose Jiminnydata (transcripts, summaries, deal context)to external Al tools like Claude, OpenAl,and Gemini.• Target Value: Increases productstickiness, reduces manual data entry/copy-pasting, and achieves competitiveoaritv with olattorms like Gona and Avoma.© Enter a prompt for GeminiProvYour liminny chats aren't used to imorove our models. Gemini is Alland can make mistakes, includina about people.Your privacy & GeminSummarize page$ Product> 7 Product DocunT Back to topv ? Product Briefs• Activity Export• V Autologging activities• - Deal Insiahts - Multiple currencies# Reinvent Themes & Topics (and ACS)Billing Portal• • Upload Video/Audio Recordinas• = White-Label Jiminny Instance• E Win/Loss Analysis for a Deal• • Hubspot app|• Automatically hard delete data for churned customers• V Ask Jiminny Anything on Call level |• • Ask Jiminny for Open and Closed Deals• V Ask liminny Anvthina on Deal levell• • Automatically record all calendar meetings• Product Tiering• Recording Consent• V Automated CRM Filling• • Automated Exec Reports• Auto-detect Activity Type• E AI Signals & Alerts• M AJA on Anything• AI Call Scoring1 • E Jiminny MCP Connector• E Desktop app to record a meetings without visible N...> * Feedback> 4, Research & User Feedback+ CreateSira:: Teams*** MorelQ Search Confluence, Jira, Google Drive and other appsv E Jiminny MCP ConnectorRequirementAllow customers to securely control who and whatdata is accessible externallyPrivate meetings shouldn't be exposed via MCPEnsure Jiminny data can be combined with othersources (e.g. CRM, docs) in AI workflowsMCP is available only for Scale tier and aboveProvide visibility into how external AI tools accessJiminny data100% C/9 8 Wed 22 Apr 18:06:51+ CreateC ASK ROVO A ® 0Updated 10m ago CD0[ Edit& ShareImportanceHIGHHIGHHIGHNoteswidening the date range, removingthe account filter, or checking the repname is spelled correctly in Jiminny."Ensure MCP only exposes data user hasaccess to - based on team visibilitysettings. This means that if a user is notallow to access calls/deals in Jiminny UIthen they shouldn't be able to accessthose through the MCP as well.When a meetings is set to Private thenthe information about it shouldn't beexposed through the MCP.Ensure data is structured to be easilycombined with:• CRM (accounts, deals)• external docsUse consistent identifiers:accoun. DsCustomers who are on Capture tiershould be able to access any of theirdata through MCP.This should also cover the scenariowhen a customer has been on Scale butthen downgrades to Capture - their MCPaccess should stop working.Audit logs:• what data was accessed by whichexternal svstem whenidentity - who made the request...
|
NULL
|
|
72157
|
1750
|
8
|
2026-04-22T15:06:51.156552+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-22/1776 /Users/lukas/.screenpipe/data/data/2026-04-22/1776870411156_m1.jpg...
|
Slack
|
Petko Kashinski (DM) - Jiminny Inc - 2 new items - Petko Kashinski (DM) - Jiminny Inc - 2 new items - Slack...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
Directories
jiminny-x-integration-app
platform-inner-team
ai-chapter
alerts
backend
c-learning-people
confusion-clinic
curiosity_lab
deal-insights-dev
engineering
frontend
general
infra-changes
jiminny-bg
people-with-copilot-licences
people-with-zoom-phone-licences
platform-team
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Petko Kashinski
Aneliya Angelova
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Nikolay Yankov
Nikolay Nikolov
Mario Georgiev
Todor Stamatov
Gabriela Dureva
Vasil Vasilev
Galya Dimitrova
Stefka Stoyanova
Stoyan Tanev
Nikolay Ivanov
Toast
Jira Cloud
Google Calendar
Unread mentions
Messages
Messages
Add canvas
Add canvas
Files
Files
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Lukas Kovalik
Yesterday at 1:51:29 PM
1:51 PM
ок
Yesterday at 1:51:46 PM
1:51
automated-reports-track-interest
нещо такава
1 reaction, react with white check mark emoji
1
Add reaction…
Petko Kashinski
Yesterday at 1:51:48 PM
1:51 PM
Аз от там си правя автоматизация и казвам на полето да отиде на 'true', ако сме го получили в payload
(edited)
Yesterday at 1:52:07 PM
1:52
okay
Yesterday at 1:52:10 PM
1:52
Наистина за мен няма значение
Lukas Kovalik
Yesterday at 1:52:19 PM
1:52 PM
добре, мерси
Petko Kashinski
Yesterday at 1:52:32 PM
1:52 PM
Само кажи като го направиш за да знам на какво си се спрял
Lukas Kovalik
Yesterday at 1:53:00 PM
1:53 PM
има ли всъщност тестова среда за planhat или само прод
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Petko Kashinski
Yesterday at 1:53:35 PM
1:53 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
Yesterday at 1:53:35 PM
1:53
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Yesterday at 1:53:44 PM
1:53
Аз съм от ония лудите дето тестват само на прод
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Yesterday at 1:53:45 PM
1:53
хахахха
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
Yesterday at 1:54:17 PM
1:54 PM
аз не съм чувал за такава но не съм и работил по planhat
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Yesterday at 1:54:45 PM
1:54
ок мерси, ще ти пиша, или в тикет направо когато сме готови
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Petko Kashinski
Yesterday at 1:56:12 PM
1:56 PM
oks thx
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Petko Kashinski
Today at 4:48:19 PM
4:48 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
New
Today at 4:48:25 PM
4:48
Имаш ли минутка за бърз хъдъл :?
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Conversation marked as unread from this message
Channel...
|
[{"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":"deal-insights-dev","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":"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":"Petko Kashinski","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","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 Yankov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Mario Georgiev","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":"Vasil Vasilev","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 Tanev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Ivanov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Google Calendar","depth":23,"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":"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":"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":"Yesterday at 1:51:29 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:51 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ок","depth":24,"role_description":"text"},{"role":"AXLink","text":"Yesterday at 1:51:46 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:51","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"automated-reports-track-interest","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"нещо такава","depth":24,"role_description":"text"},{"role":"AXCheckBox","text":"1 reaction, react with white check mark emoji","depth":24,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":25,"role_description":"text"},{"role":"AXButton","text":"Add reaction…","depth":24,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Petko Kashinski","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":"Yesterday at 1:51:48 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:51 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Аз от там си правя автоматизация и казвам на полето да отиде на 'true', ако сме го получили в payload","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"(edited)","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"Yesterday at 1:52:07 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:52","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"okay","depth":24,"role_description":"text"},{"role":"AXLink","text":"Yesterday at 1:52:10 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:52","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Наистина за мен няма значение","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":"Yesterday at 1:52:19 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:52 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"добре, мерси","depth":24,"role_description":"text"},{"role":"AXButton","text":"Petko Kashinski","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":"Yesterday at 1:52:32 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:52 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Само кажи като го направиш за да знам на какво си се спрял","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":"Yesterday at 1:53:00 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:53 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"има ли всъщност тестова среда за planhat или само прод","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":"Petko Kashinski","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":"Yesterday at 1:53:35 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:53 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":"Yesterday at 1:53:35 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:53","depth":25,"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":"Yesterday at 1:53:44 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:53","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":"Yesterday at 1:53:45 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:53","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":"Yesterday at 1:54:17 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:54 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"аз не съм чувал за такава но не съм и работил по planhat","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":"Yesterday at 1:54:45 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:54","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":"Petko Kashinski","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":"Yesterday at 1:56:12 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1:56 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"oks thx","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":"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":"Petko Kashinski","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":"Today at 4:48:19 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:48 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":"AXStaticText","text":"New","depth":21,"role_description":"text"},{"role":"AXLink","text":"Today at 4:48:25 PM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4:48","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":"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":"Conversation marked as unread from this message","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"Channel","depth":11,"role_description":"text"}]...
|
8802726273870990778
|
-1285331486997460650
|
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
deal-insights-dev
engineering
frontend
general
infra-changes
jiminny-bg
people-with-copilot-licences
people-with-zoom-phone-licences
platform-team
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Stoyan Tomov
Petko Kashinski
Aneliya Angelova
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Nikolay Yankov
Nikolay Nikolov
Mario Georgiev
Todor Stamatov
Gabriela Dureva
Vasil Vasilev
Galya Dimitrova
Stefka Stoyanova
Stoyan Tanev
Nikolay Ivanov
Toast
Jira Cloud
Google Calendar
Unread mentions
Messages
Messages
Add canvas
Add canvas
Files
Files
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Lukas Kovalik
Yesterday at 1:51:29 PM
1:51 PM
ок
Yesterday at 1:51:46 PM
1:51
automated-reports-track-interest
нещо такава
1 reaction, react with white check mark emoji
1
Add reaction…
Petko Kashinski
Yesterday at 1:51:48 PM
1:51 PM
Аз от там си правя автоматизация и казвам на полето да отиде на 'true', ако сме го получили в payload
(edited)
Yesterday at 1:52:07 PM
1:52
okay
Yesterday at 1:52:10 PM
1:52
Наистина за мен няма значение
Lukas Kovalik
Yesterday at 1:52:19 PM
1:52 PM
добре, мерси
Petko Kashinski
Yesterday at 1:52:32 PM
1:52 PM
Само кажи като го направиш за да знам на какво си се спрял
Lukas Kovalik
Yesterday at 1:53:00 PM
1:53 PM
има ли всъщност тестова среда за planhat или само прод
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Petko Kashinski
Yesterday at 1:53:35 PM
1:53 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
Yesterday at 1:53:35 PM
1:53
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Yesterday at 1:53:44 PM
1:53
Аз съм от ония лудите дето тестват само на прод
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Yesterday at 1:53:45 PM
1:53
хахахха
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
Yesterday at 1:54:17 PM
1:54 PM
аз не съм чувал за такава но не съм и работил по planhat
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Yesterday at 1:54:45 PM
1:54
ок мерси, ще ти пиша, или в тикет направо когато сме готови
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Petko Kashinski
Yesterday at 1:56:12 PM
1:56 PM
oks thx
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Jump to date
Petko Kashinski
Today at 4:48:19 PM
4:48 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
New
Today at 4:48:25 PM
4:48
Имаш ли минутка за бърз хъдъл :?
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Conversation marked as unread from this message
Channel
iTerm2ShellEditViewSessionScriptsProfilesWindowHelpБГdockerDOCKERO 881docker882-zshroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debugNow: 2026-04-21 13:25:21From: 2026-04-20 00:00:00Тo: 2026-04-20 23:59:59root@docker_lamp_1:/home/jiminny# php artisan jiminny:debugNow:2026-04-20 13:25:31From: 2026-04-17 00:00:00To:2026-04-1723:59:59root@docker_lamp_1:/home/jiminny# php artisan jiminny:debugNow: 2026-04-1913:26:02From: 2026-04-17 00:00:00To: 2026-04-1723:59:59root@docker_lamp_1:/home/jiminny# php artisan jiminny:debugNow: 2026-04-18 13:26:53From: 2026-04-17 00:00:00To: 2026-04-1723:59:59root@docker_lamp_1:/home/jiminny# php artisan jiminny:debugNow: 2026-04-1713:27:05From: 2026-04-16 00:00:00To: 2026-04-16 23:59:59root@docker_lamp_1:/home/jiminny#]* Build full day ac... • 24screenpipe*O 85-zsh86APP (-zsh)100% <7Wed 22 Apr 18:06:5218187ec2-user@ip-10-..• *8|+...
|
NULL
|
|
43261
|
920
|
52
|
2026-04-17T07:59:42.747754+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776412782747_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfiles→ToolsW FirefoxFileEditViewHistoryBookmarksProfiles→ToolsWindowHelp> 0.ladlBackend Chapter • 31m leftmeet.google.com/gjc-ikxu-wxu?authuser=lukas.kovalik%40jiminny.comNikolay Nikolov (Presenting, annotating)100% C8 • Fri 17 Apr 10:59:42=3B+nalacaiwouohttps://github.com/jiminny/app/commit/6b85272ad481136889d0701ba49138935f93520bTO0ODebug crm-sync...E Workers |Datadog C RefineSentryjiminny /app 8‹> Code17 Pull requests6. AgentsActions0 WikiSecurity and qualitye Insights@ SettingsCommit 6b85272LakyLak committed 3 weeks agoJY-19666 add casting on objectP naster (#11796)Q Filter files...• fй app/Services/Crm/Hubspot/...B OpportunitySyncTrait.phpFri 17 Apr 10:50L Al BookmarxsLa Learnl Al Chapter home@ Review( Rev Prophet|Q Type to search+ -1 file changed +1-1 lines changedv app/Services/Cra/Hubspot/ServiceTraits/OpportunitySyncTrait.php ÷00 -454,7 +454,7 00 private function batchSyncCrnobjects(string SobjectType, array Scraids): array4>41Sthis->client->getContactsByIds(Schunk, Sthis-456459>getContactFields()):foreach (sobjects as Sobjectid « SobjectData) ‹Sthis→>inportCrn0bject(SobjectType, Sobjectid, SobjectData,Ssyncobjects)sthis->logger->info(*l' • Sthis->getDisplayßane() • '] Batchsynced. SobjectType,lComments o455456457459• Browse files1 parent daefb8ß connit 6685272Q Search within codestnss-scisent gercontactsoyzostschunk, Schas">getContactFields()):foreach (Sobjects as sobjectid « SobjectData) ‹sthis-sinportCrnobject(SobjectType, (string) sobjectid,Sobjectbata, Ssync0bjects);sthis->logper->info('l' • Sthis->getDisplayNane() • *] Batchsynced Sobjecttype,& Lock conversationNikolay Nikolovmeet.google.com is sharing your screen.Lukas Kovalik10:59 AM | Backend Chapter...
|
NULL
|
8802213466571005734
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfiles→ToolsW FirefoxFileEditViewHistoryBookmarksProfiles→ToolsWindowHelp> 0.ladlBackend Chapter • 31m leftmeet.google.com/gjc-ikxu-wxu?authuser=lukas.kovalik%40jiminny.comNikolay Nikolov (Presenting, annotating)100% C8 • Fri 17 Apr 10:59:42=3B+nalacaiwouohttps://github.com/jiminny/app/commit/6b85272ad481136889d0701ba49138935f93520bTO0ODebug crm-sync...E Workers |Datadog C RefineSentryjiminny /app 8‹> Code17 Pull requests6. AgentsActions0 WikiSecurity and qualitye Insights@ SettingsCommit 6b85272LakyLak committed 3 weeks agoJY-19666 add casting on objectP naster (#11796)Q Filter files...• fй app/Services/Crm/Hubspot/...B OpportunitySyncTrait.phpFri 17 Apr 10:50L Al BookmarxsLa Learnl Al Chapter home@ Review( Rev Prophet|Q Type to search+ -1 file changed +1-1 lines changedv app/Services/Cra/Hubspot/ServiceTraits/OpportunitySyncTrait.php ÷00 -454,7 +454,7 00 private function batchSyncCrnobjects(string SobjectType, array Scraids): array4>41Sthis->client->getContactsByIds(Schunk, Sthis-456459>getContactFields()):foreach (sobjects as Sobjectid « SobjectData) ‹Sthis→>inportCrn0bject(SobjectType, Sobjectid, SobjectData,Ssyncobjects)sthis->logger->info(*l' • Sthis->getDisplayßane() • '] Batchsynced. SobjectType,lComments o455456457459• Browse files1 parent daefb8ß connit 6685272Q Search within codestnss-scisent gercontactsoyzostschunk, Schas">getContactFields()):foreach (Sobjects as sobjectid « SobjectData) ‹sthis-sinportCrnobject(SobjectType, (string) sobjectid,Sobjectbata, Ssync0bjects);sthis->logper->info('l' • Sthis->getDisplayNane() • *] Batchsynced Sobjecttype,& Lock conversationNikolay Nikolovmeet.google.com is sharing your screen.Lukas Kovalik10:59 AM | Backend Chapter...
|
43259
|
|
67183
|
1511
|
60
|
2026-04-21T15:28:26.025965+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776785306025_m1.jpg...
|
Firefox
|
Jiminny — Work
|
True
|
app.staging.jiminny.com/ai-reports
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 2 Q2 - Platform Team - Scrum Board Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20372] AI Reports > Empty page design and promotion - Jira
[JY-20372] AI Reports > Empty page design and promotion - Jira
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Jiminny MCP Connector - Product - Confluence
Jiminny MCP Connector - Product - Confluence
Jiminny Mail
Jiminny Mail
[JY-20500] Batch initial sync for Salesforce - Jira
[JY-20500] Batch initial sync for Salesforce - Jira
Feed — jiminny — Sentry
Feed — jiminny — Sentry
Jiminny
Jiminny
Pipelines - jiminny/app
Pipelines - jiminny/app
Formalize
Formalize
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
Search results: calendar | Jiminny Help Center
Search results: calendar | Jiminny Help Center
Jiminny
Jiminny
Jiminny
Jiminny
Close tab
Edit - Engineering - Confluence
Edit - Engineering - Confluence
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
JY-18909-automated-reports-ask-jiminny ■ 874667
27
27
AI Reports
AI Reports
Ask Jiminny reports
Ask Jiminny reports
Report name
Period
Exec Summary × Report Type
Exec Summary
×
Report Type
Clear all
NAME
FREQUENCY
SHARED
DATE
ACTIONS
Shared With Group - 1 Jul 2025 - 15 Apr 2026
One-Off
31/03/2026
Jiminny Recipient - 1 Dec 2025 - 14 May 2026
One-Off
31/03/2026
Jiminny Recipient - 1 Dec 2025 - 14 May 2026
One-Off
31/03/2026
Jiminny Recipient - 1 Dec 2025 - 14 May 2026
One-Off
31/03/2026
You are currently impersonating Aneliya Angelova
Settings
Clear
Filter URLs
Pause/Resume recording network log
New Request
Search
Request Blocking
Disable Cache
Disable Cache
No Throttling
Network Settings
All
HTML
CSS
JS
XHR
Fonts
Images
Media
WS
Other
Status
Status
Method
Method
Domain
Domain
File
File
Initiator
Initiator
Type
Type
Transferred
Transferred
Size
Size
0 ms
0 ms
200
POST
o36719.ingest.sentry.io
/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0
sentry-B6v5fcc5.js
:2
(fetch)
json
520 B
2 B
182 ms
200
POST
o36719.ingest.sentry.io
/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0
sentry-B6v5fcc5.js
:2
(fetch)
json
520 B
2 B
108 ms
200
GET
app.staging.jiminny.com
search?status[]=completed&sort_by=dateHeld&sort_direction=desc&exclude[]=stats&only_recorded=1&user_id[]=b497352e-96dd-4e53-ab44-05de24c4f424
sentry-B6v5fcc5.js
:8
(xhr)
json
6.21 kB
12.94 kB
739 ms
200
GET
app.staging.jiminny.com
automated-reports
sentry-B6v5fcc5.js
:8
(xhr)
json
5.87 kB
27.02 kB
852 ms
200
GET
app.staging.jiminny.com
recent
sentry-B6v5fcc5.js
:8
(xhr)
json
5.56 kB
14.84 kB
527 ms
200
GET
app.staging.jiminny.com
integrations
sentry-B6v5fcc5.js
:8
(xhr)
json
3.83 kB
5.53 kB
531 ms
200
GET
find.userpilot.io
NX-094be170
sentry-B6v5fcc5.js
:8
(xhr)
json
803 B
62 B
39 ms
200
POST
app.staging.jiminny.com
authenticate
sentry-B6v5fcc5.js
:8
(xhr)
json
3.12 kB
96 B
423 ms
200
POST
r.logr-in.com...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20372] AI Reports > Empty page design and promotion - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20372] AI Reports > Empty page design and promotion - Jira","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny MCP Connector - Product - Confluence","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny MCP Connector - Product - Confluence","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny Mail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20500] Batch initial sync for Salesforce - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20500] Batch initial sync for Salesforce - Jira","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Formalize","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Formalize","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"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":"Search results: calendar | Jiminny Help Center","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search results: calendar | Jiminny Help Center","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"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":"Edit - Engineering - Confluence","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Edit - Engineering - Confluence","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":"AXStaticText","text":"JY-18909-automated-reports-ask-jiminny ■ 874667","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"27","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"27","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"AI Reports","depth":13,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AI Reports","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Ask Jiminny reports","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Jiminny reports","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Report name","depth":17,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Period","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Exec Summary × Report Type","depth":16,"value":"Exec Summary × Report Type","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Exec Summary","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"×","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Report Type","depth":18,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Clear all","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NAME","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FREQUENCY","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SHARED","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ACTIONS","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shared With Group - 1 Jul 2025 - 15 Apr 2026","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"One-Off","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31/03/2026","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny Recipient - 1 Dec 2025 - 14 May 2026","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"One-Off","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31/03/2026","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny Recipient - 1 Dec 2025 - 14 May 2026","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"One-Off","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31/03/2026","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny Recipient - 1 Dec 2025 - 14 May 2026","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"One-Off","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31/03/2026","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You are currently impersonating Aneliya Angelova","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Clear","depth":16,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextField","text":"Filter URLs","depth":16,"help_text":"","role_description":"search text field","subrole":"AXSearchField","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Pause/Resume recording network log","depth":16,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"New Request","depth":16,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Search","depth":16,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Request Blocking","depth":16,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Disable Cache","depth":17,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Disable Cache","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"No Throttling","depth":16,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Network Settings","depth":16,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"All","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"HTML","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"CSS","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"JS","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"XHR","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Fonts","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Images","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Media","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"WS","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Other","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Status","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Status","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Method","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Method","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Domain","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Domain","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"File","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"File","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Initiator","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initiator","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Type","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Transferred","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Transferred","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Size","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Size","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"0 ms","depth":24,"help_text":"Timeline","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0 ms","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POST","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"o36719.ingest.sentry.io","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sentry-B6v5fcc5.js","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":2","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(fetch)","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"520 B","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2 B","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"182 ms","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POST","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"o36719.ingest.sentry.io","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sentry-B6v5fcc5.js","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":2","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(fetch)","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"520 B","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2 B","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"108 ms","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.staging.jiminny.com","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"search?status[]=completed&sort_by=dateHeld&sort_direction=desc&exclude[]=stats&only_recorded=1&user_id[]=b497352e-96dd-4e53-ab44-05de24c4f424","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sentry-B6v5fcc5.js","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":8","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(xhr)","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6.21 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12.94 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"739 ms","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.staging.jiminny.com","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"automated-reports","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sentry-B6v5fcc5.js","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":8","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(xhr)","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.87 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"27.02 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"852 ms","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.staging.jiminny.com","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"recent","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sentry-B6v5fcc5.js","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":8","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(xhr)","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.56 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14.84 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"527 ms","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.staging.jiminny.com","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"integrations","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sentry-B6v5fcc5.js","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":8","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(xhr)","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3.83 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.53 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"531 ms","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"find.userpilot.io","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NX-094be170","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sentry-B6v5fcc5.js","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":8","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(xhr)","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"803 B","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"62 B","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"39 ms","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POST","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.staging.jiminny.com","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"authenticate","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sentry-B6v5fcc5.js","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":8","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(xhr)","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3.12 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"96 B","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"423 ms","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POST","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"r.logr-in.com","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8801846970343954851
|
-4748233366390037439
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 2 Q2 - Platform Team - Scrum Board Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20372] AI Reports > Empty page design and promotion - Jira
[JY-20372] AI Reports > Empty page design and promotion - Jira
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Jiminny MCP Connector - Product - Confluence
Jiminny MCP Connector - Product - Confluence
Jiminny Mail
Jiminny Mail
[JY-20500] Batch initial sync for Salesforce - Jira
[JY-20500] Batch initial sync for Salesforce - Jira
Feed — jiminny — Sentry
Feed — jiminny — Sentry
Jiminny
Jiminny
Pipelines - jiminny/app
Pipelines - jiminny/app
Formalize
Formalize
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
Search results: calendar | Jiminny Help Center
Search results: calendar | Jiminny Help Center
Jiminny
Jiminny
Jiminny
Jiminny
Close tab
Edit - Engineering - Confluence
Edit - Engineering - Confluence
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
JY-18909-automated-reports-ask-jiminny ■ 874667
27
27
AI Reports
AI Reports
Ask Jiminny reports
Ask Jiminny reports
Report name
Period
Exec Summary × Report Type
Exec Summary
×
Report Type
Clear all
NAME
FREQUENCY
SHARED
DATE
ACTIONS
Shared With Group - 1 Jul 2025 - 15 Apr 2026
One-Off
31/03/2026
Jiminny Recipient - 1 Dec 2025 - 14 May 2026
One-Off
31/03/2026
Jiminny Recipient - 1 Dec 2025 - 14 May 2026
One-Off
31/03/2026
Jiminny Recipient - 1 Dec 2025 - 14 May 2026
One-Off
31/03/2026
You are currently impersonating Aneliya Angelova
Settings
Clear
Filter URLs
Pause/Resume recording network log
New Request
Search
Request Blocking
Disable Cache
Disable Cache
No Throttling
Network Settings
All
HTML
CSS
JS
XHR
Fonts
Images
Media
WS
Other
Status
Status
Method
Method
Domain
Domain
File
File
Initiator
Initiator
Type
Type
Transferred
Transferred
Size
Size
0 ms
0 ms
200
POST
o36719.ingest.sentry.io
/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0
sentry-B6v5fcc5.js
:2
(fetch)
json
520 B
2 B
182 ms
200
POST
o36719.ingest.sentry.io
/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0
sentry-B6v5fcc5.js
:2
(fetch)
json
520 B
2 B
108 ms
200
GET
app.staging.jiminny.com
search?status[]=completed&sort_by=dateHeld&sort_direction=desc&exclude[]=stats&only_recorded=1&user_id[]=b497352e-96dd-4e53-ab44-05de24c4f424
sentry-B6v5fcc5.js
:8
(xhr)
json
6.21 kB
12.94 kB
739 ms
200
GET
app.staging.jiminny.com
automated-reports
sentry-B6v5fcc5.js
:8
(xhr)
json
5.87 kB
27.02 kB
852 ms
200
GET
app.staging.jiminny.com
recent
sentry-B6v5fcc5.js
:8
(xhr)
json
5.56 kB
14.84 kB
527 ms
200
GET
app.staging.jiminny.com
integrations
sentry-B6v5fcc5.js
:8
(xhr)
json
3.83 kB
5.53 kB
531 ms
200
GET
find.userpilot.io
NX-094be170
sentry-B6v5fcc5.js
:8
(xhr)
json
803 B
62 B
39 ms
200
POST
app.staging.jiminny.com
authenticate
sentry-B6v5fcc5.js
:8
(xhr)
json
3.12 kB
96 B
423 ms
200
POST
r.logr-in.com...
|
67181
|
|
28685
|
590
|
48
|
2026-04-15T14:20:57.243499+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776262857243_m1.jpg...
|
Boosteroid
|
Boosteroid
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackFileEditViewGoEDHomeDMSActivityFilesLater..• +SlackFileEditViewGoEDHomeDMSActivityFilesLater..•More+HistoryWindowHelp→Search Jiminny IncJiminny ...+CHISHICCIITIS# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...# releases8 226 0Messages@ Files• Bookmarks+VIeWSOUToday ~GitHub APP3:28 PM7 new commits pushed to master by nikolay-yankov24b989ee - Enhance SECFIXdocumentation and policiesa3a0a742 - Update SECFIX Slack channelreference in documentation and workflowfiles071c999d - Merge branch 'master' intoimprove-secfix-bot-15-04-2026981e9a1a - Update SECFIX_PROMPT.mdto enhance clarity on upgrade safety andchangelog reviewsDirect messages6e938e53 - Enhance SECFIX workflow withSlack notification optionsAneliya Angelova, ...Show moreStoyan Tanev( jiminny/app Added by GitHubVesNew. Galya DimitrovaCircleCl APP3:53 PMDeployment Successful!€. Vasil VasilevR. Steliyan GeorgievProject: appAdelina Petrova, Ili...When:04/15/202612:53:30P. Adelina PetrovaTag:R. Nikolay Nikolovii: AppsView JobJira Cloud1Message #releasesToast+AaActivity MonitorAll ProcessesProcess NameBoosteroidWindowServerFirefoxFirefoxCP Isolated Web ContentFirefoxFirefoxCP Isolated Web ContentCursorUlViewService (Not Responding)Firefox GPU HelperFirefoxCP Isolated Web ContentFirefox GPU HelperVTDecoderXPCServiceFirefoxCP 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)Claude Helper (Renderer)claudeNotion Helper (Renderer)FirefoxCP Isolated Web ContentscreenpipeFirefoxCP Isolated Web ContentiTerm2FirefoxCP Isolated Web ContentMEMORY PRESSUREMem...2,05 GB1,20 GB1 007,7 MB963,0 MB865,0 MB802,7 MB794,4 MB550,2 MB547,5 MB543,9 MB516,0 MB467,0 MB447,8 MB436,3 MB434,2 MB405,2 MB394,1 MB391,9 MB372,6 MB346,0 MB326,3 MB326,2 MB323,8 MB298,2 MB271,9 MB257.5 MB253,2 MB238,8 MBPhysical Memory:Memory Used:Cached Files:Swap Used:A100% <478Wed 15 Apr 17:20:57CPUMemoryDiskThreads3823742684282925261124232615272524231515132127602726EnergyPorts59919 7977301261 20312920 043242127251168121121124185125125121120171219723281235231261 832122PID93892407801442974146644203084280193671314673938993548035276358314186343652430163689848173265486051950910114835833428764829848785613816,00 GB14,16 GB <1,79 GB3,02 GBApp Memory:Wired Memory:Compressed:NetworkUserlukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas3,60 GB2,91 GB7,10 GB...
|
NULL
|
8801812879560471632
|
NULL
|
click
|
ocr
|
NULL
|
+SlackFileEditViewGoEDHomeDMSActivityFilesLater..• +SlackFileEditViewGoEDHomeDMSActivityFilesLater..•More+HistoryWindowHelp→Search Jiminny IncJiminny ...+CHISHICCIITIS# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...# releases8 226 0Messages@ Files• Bookmarks+VIeWSOUToday ~GitHub APP3:28 PM7 new commits pushed to master by nikolay-yankov24b989ee - Enhance SECFIXdocumentation and policiesa3a0a742 - Update SECFIX Slack channelreference in documentation and workflowfiles071c999d - Merge branch 'master' intoimprove-secfix-bot-15-04-2026981e9a1a - Update SECFIX_PROMPT.mdto enhance clarity on upgrade safety andchangelog reviewsDirect messages6e938e53 - Enhance SECFIX workflow withSlack notification optionsAneliya Angelova, ...Show moreStoyan Tanev( jiminny/app Added by GitHubVesNew. Galya DimitrovaCircleCl APP3:53 PMDeployment Successful!€. Vasil VasilevR. Steliyan GeorgievProject: appAdelina Petrova, Ili...When:04/15/202612:53:30P. Adelina PetrovaTag:R. Nikolay Nikolovii: AppsView JobJira Cloud1Message #releasesToast+AaActivity MonitorAll ProcessesProcess NameBoosteroidWindowServerFirefoxFirefoxCP Isolated Web ContentFirefoxFirefoxCP Isolated Web ContentCursorUlViewService (Not Responding)Firefox GPU HelperFirefoxCP Isolated Web ContentFirefox GPU HelperVTDecoderXPCServiceFirefoxCP 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)Claude Helper (Renderer)claudeNotion Helper (Renderer)FirefoxCP Isolated Web ContentscreenpipeFirefoxCP Isolated Web ContentiTerm2FirefoxCP Isolated Web ContentMEMORY PRESSUREMem...2,05 GB1,20 GB1 007,7 MB963,0 MB865,0 MB802,7 MB794,4 MB550,2 MB547,5 MB543,9 MB516,0 MB467,0 MB447,8 MB436,3 MB434,2 MB405,2 MB394,1 MB391,9 MB372,6 MB346,0 MB326,3 MB326,2 MB323,8 MB298,2 MB271,9 MB257.5 MB253,2 MB238,8 MBPhysical Memory:Memory Used:Cached Files:Swap Used:A100% <478Wed 15 Apr 17:20:57CPUMemoryDiskThreads3823742684282925261124232615272524231515132127602726EnergyPorts59919 7977301261 20312920 043242127251168121121124185125125121120171219723281235231261 832122PID93892407801442974146644203084280193671314673938993548035276358314186343652430163689848173265486051950910114835833428764829848785613816,00 GB14,16 GB <1,79 GB3,02 GBApp Memory:Wired Memory:Compressed:NetworkUserlukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas3,60 GB2,91 GB7,10 GB...
|
NULL
|
|
28259
|
585
|
41
|
2026-04-15T14:11:18.665994+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776262278665_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 messagesAneliya Angelova, ...Stoyan TanevVesPP. Galya Dimitrova€. Vasil VasilevSteliyan GeorgievAdelina Petrova, Ili...P. Adelina PetrovaD. Nikolay Nikolov2 Galya Dimitrova, Ni...ii: AppsJira CloudToast# releases8 22MessagesVIeWSOU+@ Files• BookmarksToday ~GitHub APP3:28 PM7 new commits pushed to master by nikolay-yankov24b989ee - Enhance SECFIXdocumentation and policiesa3a0a742 - Update SECFIX Slack channelreference in documentation and workflowfiles071c999d - Merge branch 'master' intoimprove-secfix-bot-15-04-2026981e9a1a - Update SECFIX_PROMPT.mdto enhance clarity on upgrade safety andchangelog reviews6e938e53 - Enhance SECFIX workflow withSlack notification optionsShow more( jiminny/app Added by GitHubNewCircleCl APP3:53 PMDeployment Successful!Project: appWhen:04/15/202612:53:30Tag:View JobMessage #releases+Aa...Activity MonitorAll ProcessesProcess NameBoosteroidWindowServerFirefoxFirefoxCP Isolated Web ContentFirefoxCursorUlViewService (Not Responding)FirefoxCP Isolated Web ContentFirefox GPU HelperFirefoxCP Isolated Web ContentFirefox GPU HelperVTDecoderXPCServiceSlack Helper (Renderer)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentNotion Calendar Helper (Renderer)Notion Helper (Renderer)Claude Helper (Renderer)claudeFirefoxCP Isolated Web ContentiTerm2FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentCode Helper (Renderer)MEMORY PRESSURERMem...2,04 GB1,20 GB998,9 MB962,9 MB853,4 MB794,4 MB794,3 MB550,2 MB547,4 MB543,9 MB515,9 MB497,0 MB466,2 MB446,7 MB435,7 MB401,3 MB393,1 MB391,2 MB372,5 MB347,3 MB328,2 MB327,4 MB326,2 MB293,6 MB256,3 MB253,6 MB238,0 MB215,2 MBPhysical Memory:Memory Used:Cached Files:Swap Used:100% <478Wed 15 Apr 17:11:18CPUMemoryDiskThreads37217325832829242611162325262626232215201513287282719EnergyPorts60219 7917261241 20220 049130241125251166199119124124124126119119171313219721261 835128124243PID93892407801442974146648424203080193671314673938994186335480352763583143652430163689848173265481148605195091035833487848298561388534016,00 GB14,16 GB <1,80 GB3,02 GBApp Memory:Wired Memory:Compressed:NetworkUserlukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas3,62 GB2,89 GB7,09 GB...
|
NULL
|
8801345207879701309
|
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 messagesAneliya Angelova, ...Stoyan TanevVesPP. Galya Dimitrova€. Vasil VasilevSteliyan GeorgievAdelina Petrova, Ili...P. Adelina PetrovaD. Nikolay Nikolov2 Galya Dimitrova, Ni...ii: AppsJira CloudToast# releases8 22MessagesVIeWSOU+@ Files• BookmarksToday ~GitHub APP3:28 PM7 new commits pushed to master by nikolay-yankov24b989ee - Enhance SECFIXdocumentation and policiesa3a0a742 - Update SECFIX Slack channelreference in documentation and workflowfiles071c999d - Merge branch 'master' intoimprove-secfix-bot-15-04-2026981e9a1a - Update SECFIX_PROMPT.mdto enhance clarity on upgrade safety andchangelog reviews6e938e53 - Enhance SECFIX workflow withSlack notification optionsShow more( jiminny/app Added by GitHubNewCircleCl APP3:53 PMDeployment Successful!Project: appWhen:04/15/202612:53:30Tag:View JobMessage #releases+Aa...Activity MonitorAll ProcessesProcess NameBoosteroidWindowServerFirefoxFirefoxCP Isolated Web ContentFirefoxCursorUlViewService (Not Responding)FirefoxCP Isolated Web ContentFirefox GPU HelperFirefoxCP Isolated Web ContentFirefox GPU HelperVTDecoderXPCServiceSlack Helper (Renderer)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentNotion Calendar Helper (Renderer)Notion Helper (Renderer)Claude Helper (Renderer)claudeFirefoxCP Isolated Web ContentiTerm2FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentCode Helper (Renderer)MEMORY PRESSURERMem...2,04 GB1,20 GB998,9 MB962,9 MB853,4 MB794,4 MB794,3 MB550,2 MB547,4 MB543,9 MB515,9 MB497,0 MB466,2 MB446,7 MB435,7 MB401,3 MB393,1 MB391,2 MB372,5 MB347,3 MB328,2 MB327,4 MB326,2 MB293,6 MB256,3 MB253,6 MB238,0 MB215,2 MBPhysical Memory:Memory Used:Cached Files:Swap Used:100% <478Wed 15 Apr 17:11:18CPUMemoryDiskThreads37217325832829242611162325262626232215201513287282719EnergyPorts60219 7917261241 20220 049130241125251166199119124124124126119119171313219721261 835128124243PID93892407801442974146648424203080193671314673938994186335480352763583143652430163689848173265481148605195091035833487848298561388534016,00 GB14,16 GB <1,80 GB3,02 GBApp Memory:Wired Memory:Compressed:NetworkUserlukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas3,62 GB2,89 GB7,09 GB...
|
28256
|
|
38655
|
NULL
|
0
|
2026-04-16T13:17:34.789266+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776345454789_m2.jpg...
|
Boosteroid
|
Boosteroid
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
96468271329245/70Castle AgePlayer 5 Manuel I!!!--- 96468271329245/70Castle AgePlayer 5 Manuel I!!!---Castle Built--Game Paused (P)4 Roger II of Sicily: 2748/27483 Anastasios I Dikoros: 2651/26516 Emperor Karel IV: 2591/2591Zbigniew Olesnicki: 2591/25915 Manuel I: 2570/25708 Mundzuk the Hun: 2556/25561 kovaliklukas: 2267/22677 Themistocles: 2261/2261BBBBBEE...
|
NULL
|
8801104886278506226
|
NULL
|
visual_change
|
ocr
|
NULL
|
96468271329245/70Castle AgePlayer 5 Manuel I!!!--- 96468271329245/70Castle AgePlayer 5 Manuel I!!!---Castle Built--Game Paused (P)4 Roger II of Sicily: 2748/27483 Anastasios I Dikoros: 2651/26516 Emperor Karel IV: 2591/2591Zbigniew Olesnicki: 2591/25915 Manuel I: 2570/25708 Mundzuk the Hun: 2556/25561 kovaliklukas: 2267/22677 Themistocles: 2261/2261BBBBBEE...
|
NULL
|
|
64073
|
1408
|
21
|
2026-04-21T10:22:52.167845+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776766972167_m2.jpg...
|
Firefox
|
[SRD-6793] Les Mills activity types not pulling in [SRD-6793] Les Mills activity types not pulling in - Jira — Work...
|
True
|
jiminny.atlassian.net/browse/SRD-6793?atlOrigin=ey jiminny.atlassian.net/browse/SRD-6793?atlOrigin=eyJpIjoiZThkNGIzYzE0NGZkNDYyNGE4ZGQwZjc3M2ZmYmExNzAiLCJwIjoiamlyYS1zbGFjay1pbnQifQ&focusedCommentId=73729&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-73729...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 2 Q2 - Platform Team - Scrum Board Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
[JY-20372] AI Reports > Empty page design and promotion - Jira
[JY-20372] AI Reports > Empty page design and promotion - Jira
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Jiminny MCP Connector - Product - Confluence
Jiminny MCP Connector - Product - Confluence
Jiminny Mail
Jiminny Mail
[JY-20500] Batch initial sync for Salesforce - Jira
[JY-20500] Batch initial sync for Salesforce - Jira
Feed — jiminny — Sentry
Feed — jiminny — Sentry
Jiminny
Jiminny
Pipelines - jiminny/app
Pipelines - jiminny/app
Formalize
Formalize
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
Notifications
Notifications
Notifications
Notifications
Only show unread
Only show unread
Open notifications in a new tab
more
Direct
Direct
Watching
Watching
Today
Today
Galya Dimitrova unassigned you from a bug 14 minutes ago
More information about this user
Galya Dimitrova unassigned you from a bug14 minutes ago
Galya Dimitrova unassigned you from a bug
14 minutes ago
Les Mills activity types not pulling in
Les Mills activity types not pulling in
SRD-6793 • In Progress
SRD-6793 • In Progress
Mark as read
+1 comment from Stoyan Tomov
+1 comment from Stoyan Tomov
Nikolay Yankov changed a bug from Code Review to Deployed 3 hours ago
More information about this user
Nikolay Yankov changed a bug from Code Review to Deployed3 hours ago
Nikolay Yankov changed a bug from Code Review to Deployed
3 hours ago
Les Mills activity types not pulling in
Les Mills activity types not pulling in
JY-20698 • Deployed
JY-20698 • Deployed
Mark as read
+3 updates from Stefka Stoyanova
+3 updates from Stefka Stoyanova
Aneliya Angelova changed a work item from Done to In QA 4 hours ago
More information about this user
Aneliya Angelova changed a work item from Done to In QA4 hours ago
Aneliya Angelova changed a work item from Done to In QA
4 hours ago
Report ignores frequency-based period and uses all Saved Search activities regardless of time period
Report ignores frequency-based period and uses all Saved Search activities regardless of time period
JY-20702 • In QA
JY-20702 • In QA
Mark as read
+3 updates from Aneliya Angelova
+3 updates from Aneliya Angelova
Aneliya Angelova changed a work item from Done to Done 4 hours ago
More information about this user
Aneliya Angelova changed a work item from Done to Done4 hours ago
Aneliya Angelova changed a work item from Done to Done
4 hours ago
Incorrect "expiration date" error is displayed when changing frequency of report template with valid 1-year expiry
Incorrect "expiration date" error is displayed when changing frequency of report template with valid 1-year expiry
JY-20694 • Done
JY-20694 • Done
Mark as read
+1 assignee update from Nikolay Yankov
+1 assignee update from Nikolay Yankov
Automation for Jira changed a bug from Ready for customer to Closed 4 hours ago
More information about this user
Automation for Jira changed a bug from Ready for customer to Closed4 hours ago
Automation for Jira changed a bug from Ready for customer to Closed
4 hours ago
Issue with reconnecting Zoho
Issue with reconnecting Zoho
SRD-6787 • Closed
SRD-6787 • Closed
Mark as read
Yesterday
Yesterday
Georgi Bayraktarov commented on a bug 1 day ago
More information about this user
Georgi Bayraktarov commented on a bug1 day ago
Georgi Bayraktarov commented on a bug
1 day ago
Issue with reconnecting Zoho
Issue with reconnecting Zoho
JY-20692 • Code Review
JY-20692 • Code Review
Mark as read
Morning team! As I still don’t have an update for the customer, they’re now asking if we can postpone their payment until they can gain access to the platform. I need to know if this will take longer so I can speak with Claire about a postponed payment. Thank you in advance!
Morning team! As I still don’t have an update for the customer, they’re now asking if we can postpone their payment until they can gain access to the platform. I need to know if this will take longer so I can speak with Claire about a postponed payment. Thank you in advance!
React with thumbs up emoji
React with clapping hands emoji
React with fire emoji
React with red heart emoji
Add reaction
Reply
Reply
View thread
View thread
+3 updates from Stefka Stoyanova and others
+3 updates from Stefka Stoyanova and others
Nikolay Yankov changed a subtask from In Dev to Won't do 1 day ago
More information about this user
Nikolay Yankov changed a subtask from In Dev to Won't do1 day ago
Nikolay Yankov changed a subtask from In Dev to Won't do
1 day ago
[BE] Add dash symbol between name and period in the title
[BE] Add dash symbol between name and period in the title
JY-20679 • Won't do
JY-20679 • Won't do
Mark as read
+1 assignee update from Nikolay Yankov
+1 assignee update from Nikolay Yankov
Older
Older
Nikolay Yankov assigned a subtask to you 1 week ago
More information about this user
Nikolay Yankov assigned a subtask to you1 week ago
Nikolay Yankov assigned a subtask to you
1 week ago
[BE] Endpoint for "I'm interested"
[BE] Endpoint for "I'm interested"
JY-20674 • Ready for Dev
JY-20674 • Ready for Dev
Mark as read
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
Queues
Queues
Create
Create
More for queues
More for queues
Service requests
Service requests
Create
Create
More for service requests
More for service requests
Incidents
Incidents
Create
Create
More for incidents
More for incidents
Reports
Reports
More actions for reports
More actions for reports
Operations
Operations
More actions for operations
More actions for operations
Knowledge Base
Knowledge Base
More actions for knowledge base
More actions for knowledge base
Customers
Customers
More actions for customers
More actions for customers
Channels
Channels
Email logs
Email logs
More actions for customer notification logs
More actions for customer notification logs
Developer escalations
Developer escalations
More actions for developer escalations
More actions for developer escalations
Slack integration
Slack integration
More actions for Slack integration
More actions for Slack integration
Reporting Center
Reporting Center
More actions for Reporting Center
More actions for Reporting Center
Add shortcut
Add shortcut
More actions for developer escalations
More actions for developer escalations
Archived work items
Archived work items
More actions for archived work items
More actions for archived work items
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Service-Desk Service-Desk
Service-Desk
/
Bug - Change work type
SRD-6793
SRD-6793
Copy link
Les Mills activity types not pulling in- edit summary, edit
Les Mills activity types not pulling in
Les Mills activity types not pulling in
Link work item
Link work item
Link web pages and more
Link web pages and more
Add form
Add form
Add design
Add design
Create
Create
Add app
Stoyan Tomov
raised this request
via
Jira
Hide details
Hide details
View request in portal
View request in portal
Description
Description
Edit Description, edit
Hey team,
While testing something on Les Mills’s instance, I saw that we are not pulling in their activity types when a new Playbook is created.
I tried creating “
LMUS
CX
Playbook test” Playbook (ID 5515), but no activity types got pulled in.
When I tried reproducing the same on our Jiminny instance, the activity types appeared.
Can someone please check why we are not pulling the activity types for Les Mills?
Data Centre
More information about
Edit Data Centre
US
Steps to reproduce
Steps to reproduce
More information about
Edit Steps to reproduce, edit
Create a new playbook in Les Mills's instance
Customer type
More information about
Edit Customer type
Enterprise
Actual outcome
More information about
Edit Actual outcome
No activity types are being imported upon new Playbook creation
Expected outcome
More information about
Edit Expected outcome
The activity types to get imported
Severity level
More information about
Edit Severity level
S2
Impact
Impact
More information about
Edit Impact, edit
None
Root cause
Root cause
More information about
Edit Root cause, edit
We have no access to FieldDefinition (needed to sync activity types).
Linked work items
Linked work items
Link a work item
Link a work item
relates to
relates to
JY-20698 is not done
JY-20698
Les Mills activity types not pulling in
Les Mills activity types not pulling in
Deployed - Change status
DEPLOYED
Unlink work item
Activity
Activity
All
All
Comments
Comments
History
History
Work log
Work log
Approvals
Approvals
Atlassian Intelligence Summarise 3 comments
Summarise 3 comments
Newest first Newest first
Newest first
Add internal note
Add internal note
/
Reply to customer
Reply to customer
Add attachment
Pro tip:
press
M
to comment
More information about Galya Dimitrova 12 minutes ago Internal note Copy link to comment
More information about Galya Dimitrova
Galya Dimitrova
12 minutes ago
Internal note
Copy link to comment
The fix for the fallback is now live.
Stoyan Tanev
@Stoyan Tanev
will work with Les Mills to help them update the Owner access in their CRM
Add reaction
·
Edit
Edit
·
Delete
Delete
More information about Lukas Kovalik 4 hours ago Edited Internal note Copy link to comment
More information about Lukas Kovalik
Lukas Kovalik
4 hours ago
Edited
Internal note
Copy link to comment
Pulsar seems to be working fine. I created new playbooks, and the fields were populated, including the one for which the client says the activity types were missing.
For Les Mills, that is a different story. The team owner we use for sync has no permission to access
FieldDefinition
via the Tooling API. There is a fallback logic that populates activity types from our database if the API request fails. However, the changed access permissions will cause other problems for us. The client also doesn't seem to have access to the
Organization
. Therefore, we can’t sync team metadata successfully.
Turn on wrap
Copy as text
1
[2026-04-21 06:39:44] production.ERROR: [Salesforce] Request exception [404] The requested resource does not exist {"url":"https://lesmills.my.salesforce.com/services/data/v50.0/sobjects/Organization/00D90000000fUszEAE?fields=InstanceName,OrganizationType,IsSandbox", ... }
Add reaction
·
Edit
Edit
·
Delete
Delete
More information about Stoyan Tomov 5 days ago Internal note Copy link to comment
More information about Stoyan Tomov
Stoyan Tomov
5 days ago
Internal note
Copy link to comment
FYI, Pulsar Group (EU) is facing the same issue.
Add reaction
·
Edit
Edit
·
Delete
Delete
Resize work item view side panel
Give feedback
Give feedback
Watch options: You are watching this issue, 4 people watching
4
Vote options: No one has voted for this work item yet. Vote options: No one has voted for this work item yet.
Vote options: No one has voted for this work item yet.
Share
Share
Actions
Actions
Ready for customer - Change status
Ready for customer
Automation
Automation
Details
Details
Details
Assignee
Assignee Pin to top. Only you can see pinned fields.
Stoyan Tanev- edit Assignee
More information about Stoyan Tanev
Stoyan Tanev
Assign to me
Reporter
Reporter Pin to top. Only you can see pinned fields.
Stoyan Tomov- edit Reporter
More information about Stoyan Tomov
Stoyan Tomov
Request Type
More information about Request Type
Request Type Pin to top. Only you can see pinned fields.
Edit Request Type, Report a bug selected, edit
Report a bug
Knowledge base
View related articles
Expand
Priority level
Priority level Pin to top. Only you can see pinned fields.
Edit Priority level
P2 Medium
Dev Team
Dev Team Pin to top. Only you can see pinned fields.
Edit Dev Team
Platform team
Organization
More information about
Organization Pin to top. Only you can see pinned fields.
Edit Organization
Les Mills
Canny Links
Open
Canny Links
More fields
More fields...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0018284575,"top":0.0518755,"width":0.07596409,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[JY-20372] AI Reports > Empty page design and promotion - Jira","depth":4,"bounds":{"left":0.0,"top":0.09497207,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20372] AI Reports > Empty page design and promotion - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.10614525,"width":0.11319814,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"bounds":{"left":0.0,"top":0.12769353,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"bounds":{"left":0.013297873,"top":0.13886672,"width":0.041888297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"bounds":{"left":0.0,"top":0.16041501,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"bounds":{"left":0.013297873,"top":0.17158818,"width":0.041888297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"bounds":{"left":0.0,"top":0.19313647,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"bounds":{"left":0.013297873,"top":0.20430966,"width":0.041888297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny MCP Connector - Product - Confluence","depth":4,"bounds":{"left":0.0,"top":0.22585794,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny MCP Connector - Product - Confluence","depth":5,"bounds":{"left":0.013297873,"top":0.23703113,"width":0.08294548,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny Mail","depth":4,"bounds":{"left":0.0,"top":0.2585794,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny Mail","depth":5,"bounds":{"left":0.013297873,"top":0.2697526,"width":0.02144282,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20500] Batch initial sync for Salesforce - Jira","depth":4,"bounds":{"left":0.0,"top":0.29130086,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20500] Batch initial sync for Salesforce - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.30247405,"width":0.08610372,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"bounds":{"left":0.0,"top":0.32402235,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"bounds":{"left":0.013297873,"top":0.33519554,"width":0.042719416,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.3567438,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.013297873,"top":0.367917,"width":0.013131649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.38946527,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.40063846,"width":0.039228722,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Formalize","depth":4,"bounds":{"left":0.0,"top":0.42218676,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Formalize","depth":5,"bounds":{"left":0.013297873,"top":0.43335995,"width":0.016788565,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":4,"bounds":{"left":0.0,"top":0.45490822,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.4660814,"width":0.09524601,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.46209097,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.48922586,"width":0.07413564,"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 Google Gemini (⌃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":"Tabs from other devices","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 history (⇧⌘H)","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":"Open bookmarks (⌘B)","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":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.090259306,"top":0.07861133,"width":0.016954787,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.08361037,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.0887633,"top":0.06344773,"width":0.039727394,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.095578454,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.10073138,"top":0.06344773,"width":0.044215426,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.10887633,"top":0.057861134,"width":0.029421542,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":10,"bounds":{"left":0.40475398,"top":0.06264964,"width":0.24268617,"height":0.015961692},"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.65575135,"top":0.057861134,"width":0.030086435,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.66705453,"top":0.06384677,"width":0.014793883,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.91223407,"top":0.057861134,"width":0.035904255,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.92353725,"top":0.06384677,"width":0.020611702,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Notifications","depth":12,"bounds":{"left":0.9494681,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"Notifications","depth":14,"bounds":{"left":0.954621,"top":0.06344773,"width":0.027759308,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Notifications","depth":14,"bounds":{"left":0.7883976,"top":0.11053472,"width":0.048204787,"height":0.022346368},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Notifications","depth":15,"bounds":{"left":0.7883976,"top":0.110135674,"width":0.048204787,"height":0.023543496},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Only show unread","depth":15,"bounds":{"left":0.8736702,"top":0.114924185,"width":0.039727394,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Only show unread","depth":15,"bounds":{"left":0.91672206,"top":0.11731844,"width":0.004654255,"height":0.011173184},"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open notifications in a new tab","depth":15,"bounds":{"left":0.93134975,"top":0.108938545,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"more","depth":14,"bounds":{"left":0.9439827,"top":0.108938545,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Direct","depth":17,"bounds":{"left":0.78573805,"top":0.14724661,"width":0.01861702,"height":0.025538707},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Direct","depth":19,"bounds":{"left":0.7883976,"top":0.15323225,"width":0.013297873,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Watching","depth":17,"bounds":{"left":0.804355,"top":0.14724661,"width":0.026263298,"height":0.025538707},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Watching","depth":19,"bounds":{"left":0.80701464,"top":0.15323225,"width":0.020944148,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Today","depth":18,"bounds":{"left":0.7883976,"top":0.1859537,"width":0.011801862,"height":0.012769354},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Today","depth":19,"bounds":{"left":0.7883976,"top":0.18635276,"width":0.011801862,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Galya Dimitrova unassigned you from a bug 14 minutes ago","depth":22,"bounds":{"left":0.78573805,"top":0.20869912,"width":0.16888298,"height":0.09896249},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about this user","depth":23,"bounds":{"left":0.7883976,"top":0.23743017,"width":0.01462766,"height":0.01396648},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Galya Dimitrova unassigned you from a bug14 minutes ago","depth":22,"bounds":{"left":0.80568486,"top":0.2150838,"width":0.1356383,"height":0.015961692},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Galya Dimitrova unassigned you from a bug","depth":23,"bounds":{"left":0.80568486,"top":0.21628092,"width":0.09674202,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14 minutes ago","depth":23,"bounds":{"left":0.9037567,"top":0.21628092,"width":0.03307846,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Les Mills activity types not pulling in","depth":22,"bounds":{"left":0.80568486,"top":0.23104548,"width":0.08460771,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Les Mills activity types not pulling in","depth":25,"bounds":{"left":0.811004,"top":0.23224261,"width":0.079288565,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SRD-6793 • In Progress","depth":22,"bounds":{"left":0.80568486,"top":0.24700718,"width":0.046043884,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SRD-6793 • In Progress","depth":24,"bounds":{"left":0.80568486,"top":0.2490024,"width":0.046043884,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Mark as read","depth":22,"bounds":{"left":0.94132316,"top":0.2150838,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"+1 comment from Stoyan Tomov","depth":23,"bounds":{"left":0.81698805,"top":0.27573824,"width":0.0709774,"height":0.015961692},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"+1 comment from Stoyan Tomov","depth":25,"bounds":{"left":0.81698805,"top":0.27693537,"width":0.0709774,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Nikolay Yankov changed a bug from Code Review to Deployed 3 hours ago","depth":22,"bounds":{"left":0.78573805,"top":0.32043096,"width":0.16888298,"height":0.114924185},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about this user","depth":23,"bounds":{"left":0.7883976,"top":0.349162,"width":0.01462766,"height":0.01396648},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Nikolay Yankov changed a bug from Code Review to Deployed3 hours ago","depth":22,"bounds":{"left":0.80568486,"top":0.32681563,"width":0.1356383,"height":0.031923383},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Yankov changed a bug from Code Review to Deployed","depth":23,"bounds":{"left":0.80568486,"top":0.32801276,"width":0.11569149,"height":0.029928172},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3 hours ago","depth":23,"bounds":{"left":0.828125,"top":0.34397447,"width":0.026263298,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Les Mills activity types not pulling in","depth":22,"bounds":{"left":0.80568486,"top":0.35873902,"width":0.08460771,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Les Mills activity types not pulling in","depth":25,"bounds":{"left":0.811004,"top":0.35993615,"width":0.079288565,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20698 • Deployed","depth":22,"bounds":{"left":0.80568486,"top":0.37470073,"width":0.04105718,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20698 • Deployed","depth":24,"bounds":{"left":0.80568486,"top":0.37669593,"width":0.04105718,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Mark as read","depth":22,"bounds":{"left":0.94132316,"top":0.32681563,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"+3 updates from Stefka Stoyanova","depth":23,"bounds":{"left":0.81698805,"top":0.40343177,"width":0.076296546,"height":0.015961692},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"+3 updates from Stefka Stoyanova","depth":25,"bounds":{"left":0.81698805,"top":0.4046289,"width":0.076296546,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Aneliya Angelova changed a work item from Done to In QA 4 hours ago","depth":22,"bounds":{"left":0.78573805,"top":0.4481245,"width":0.16888298,"height":0.13088587},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about this user","depth":23,"bounds":{"left":0.7883976,"top":0.47685555,"width":0.01462766,"height":0.01396648},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Aneliya Angelova changed a work item from Done to In QA4 hours ago","depth":22,"bounds":{"left":0.80568486,"top":0.45450917,"width":0.1356383,"height":0.031923383},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Aneliya Angelova changed a work item from Done to In QA","depth":23,"bounds":{"left":0.80568486,"top":0.4557063,"width":0.1306516,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4 hours ago","depth":23,"bounds":{"left":0.80568486,"top":0.4557063,"width":0.1349734,"height":0.029928172},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Report ignores frequency-based period and uses all Saved Search activities regardless of time period","depth":22,"bounds":{"left":0.80568486,"top":0.48643255,"width":0.1356383,"height":0.031923383},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Report ignores frequency-based period and uses all Saved Search activities regardless of time period","depth":25,"bounds":{"left":0.811004,"top":0.48762968,"width":0.12915559,"height":0.029928172},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20702 • In QA","depth":22,"bounds":{"left":0.80568486,"top":0.51835597,"width":0.03374335,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20702 • In QA","depth":24,"bounds":{"left":0.80568486,"top":0.5203512,"width":0.03374335,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Mark as read","depth":22,"bounds":{"left":0.94132316,"top":0.45450917,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"+3 updates from Aneliya Angelova","depth":23,"bounds":{"left":0.81698805,"top":0.547087,"width":0.07579787,"height":0.015961692},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"+3 updates from Aneliya Angelova","depth":25,"bounds":{"left":0.81698805,"top":0.5482841,"width":0.07579787,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Aneliya Angelova changed a work item from Done to Done 4 hours ago","depth":22,"bounds":{"left":0.78573805,"top":0.5917797,"width":0.16888298,"height":0.13088587},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about this user","depth":23,"bounds":{"left":0.7883976,"top":0.62051076,"width":0.01462766,"height":0.01396648},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Aneliya Angelova changed a work item from Done to Done4 hours ago","depth":22,"bounds":{"left":0.80568486,"top":0.5981644,"width":0.1356383,"height":0.031923383},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Aneliya Angelova changed a work item from Done to Done","depth":23,"bounds":{"left":0.80568486,"top":0.59936154,"width":0.12948804,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4 hours ago","depth":23,"bounds":{"left":0.80568486,"top":0.59936154,"width":0.13380983,"height":0.029928172},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Incorrect \"expiration date\" error is displayed when changing frequency of report template with valid 1-year expiry","depth":22,"bounds":{"left":0.80568486,"top":0.6300878,"width":0.1356383,"height":0.031923383},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Incorrect \"expiration date\" error is displayed when changing frequency of report template with valid 1-year expiry","depth":25,"bounds":{"left":0.811004,"top":0.6312849,"width":0.12200798,"height":0.045889866},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20694 • Done","depth":22,"bounds":{"left":0.80568486,"top":0.66201115,"width":0.03324468,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20694 • Done","depth":24,"bounds":{"left":0.80568486,"top":0.6640064,"width":0.03324468,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Mark as read","depth":22,"bounds":{"left":0.94132316,"top":0.5981644,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"+1 assignee update from Nikolay Yankov","depth":23,"bounds":{"left":0.81698805,"top":0.6907422,"width":0.0887633,"height":0.015961692},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"+1 assignee update from Nikolay Yankov","depth":25,"bounds":{"left":0.81698805,"top":0.69193935,"width":0.0887633,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Automation for Jira changed a bug from Ready for customer to Closed 4 hours ago","depth":22,"bounds":{"left":0.78573805,"top":0.73543495,"width":0.16888298,"height":0.07661612},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about this user","depth":23,"bounds":{"left":0.7883976,"top":0.764166,"width":0.01462766,"height":0.01396648},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Automation for Jira changed a bug from Ready for customer to Closed4 hours ago","depth":22,"bounds":{"left":0.80568486,"top":0.7418196,"width":0.1356383,"height":0.031923383},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Automation for Jira changed a bug from Ready for customer to Closed","depth":23,"bounds":{"left":0.80568486,"top":0.7430168,"width":0.13347739,"height":0.029928172},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4 hours ago","depth":23,"bounds":{"left":0.828125,"top":0.7589784,"width":0.02642952,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issue with reconnecting Zoho","depth":22,"bounds":{"left":0.80568486,"top":0.77374303,"width":0.07114362,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issue with reconnecting Zoho","depth":25,"bounds":{"left":0.811004,"top":0.77494013,"width":0.06582447,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SRD-6787 • Closed","depth":22,"bounds":{"left":0.80568486,"top":0.7897047,"width":0.036901597,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SRD-6787 • Closed","depth":24,"bounds":{"left":0.80568486,"top":0.79169995,"width":0.036901597,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Mark as read","depth":22,"bounds":{"left":0.94132316,"top":0.7418196,"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":"Yesterday","depth":18,"bounds":{"left":0.7883976,"top":0.82521945,"width":0.019281914,"height":0.012769354},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Yesterday","depth":19,"bounds":{"left":0.7883976,"top":0.8256185,"width":0.019281914,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Georgi Bayraktarov commented on a bug 1 day ago","depth":22,"bounds":{"left":0.78573805,"top":0.8479649,"width":0.16888298,"height":0.15203512},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about this user","depth":23,"bounds":{"left":0.7883976,"top":0.87669593,"width":0.01462766,"height":0.01396648},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Georgi Bayraktarov commented on a bug1 day ago","depth":22,"bounds":{"left":0.80568486,"top":0.85434955,"width":0.1356383,"height":0.015961692},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Georgi Bayraktarov commented on a bug","depth":23,"bounds":{"left":0.80568486,"top":0.8555467,"width":0.0909242,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1 day ago","depth":23,"bounds":{"left":0.89793885,"top":0.8555467,"width":0.020777926,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issue with reconnecting Zoho","depth":22,"bounds":{"left":0.80568486,"top":0.87031126,"width":0.07114362,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issue with reconnecting Zoho","depth":25,"bounds":{"left":0.811004,"top":0.87150836,"width":0.06582447,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20692 • Code Review","depth":22,"bounds":{"left":0.80568486,"top":0.88627297,"width":0.047872342,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20692 • Code Review","depth":24,"bounds":{"left":0.80568486,"top":0.8882682,"width":0.047872342,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Mark as read","depth":22,"bounds":{"left":0.94132316,"top":0.85434955,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Morning team! As I still don’t have an update for the customer, they’re now asking if we can postpone their payment until they can gain access to the platform. I need to know if this will take longer so I can speak with Claire about a postponed payment. Thank you in advance!","depth":22,"bounds":{"left":0.80568486,"top":0.905427,"width":0.1462766,"height":0.052673582},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Morning team! As I still don’t have an update for the customer, they’re now asking if we can postpone their payment until they can gain access to the platform. I need to know if this will take longer so I can speak with Claire about a postponed payment. Thank you in advance!","depth":25,"bounds":{"left":0.80867684,"top":0.915403,"width":0.13746676,"height":0.08459699},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"React with thumbs up emoji","depth":24,"bounds":{"left":0.80568486,"top":0.9612929,"width":0.012632979,"height":0.01915403},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"React with clapping hands emoji","depth":24,"bounds":{"left":0.8196476,"top":0.9612929,"width":0.012632979,"height":0.01915403},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"React with fire emoji","depth":24,"bounds":{"left":0.83361036,"top":0.9612929,"width":0.012632979,"height":0.01915403},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"React with red heart emoji","depth":24,"bounds":{"left":0.84757316,"top":0.9612929,"width":0.012632979,"height":0.01915403},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Add reaction","depth":22,"bounds":{"left":0.8615359,"top":0.9612929,"width":0.010638298,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reply","depth":22,"bounds":{"left":0.87483376,"top":0.9612929,"width":0.02044548,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reply","depth":24,"bounds":{"left":0.87882316,"top":0.9640862,"width":0.012466756,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View thread","depth":22,"bounds":{"left":0.92869014,"top":0.9644852,"width":0.023271276,"height":0.012769354},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"View thread","depth":23,"bounds":{"left":0.92869014,"top":0.9648843,"width":0.023271276,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"+3 updates from Stefka Stoyanova and others","depth":23,"bounds":{"left":0.8249667,"top":0.9932163,"width":0.10106383,"height":0.006783724},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"+3 updates from Stefka Stoyanova and others","depth":25,"bounds":{"left":0.8249667,"top":0.99441344,"width":0.10106383,"height":0.0055865645},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Nikolay Yankov changed a subtask from In Dev to Won't do 1 day ago","depth":22,"bounds":{"left":0.78573805,"top":1.0,"width":0.16888298,"height":-0.03790903},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about this user","depth":23,"bounds":{"left":0.7883976,"top":1.0,"width":0.01462766,"height":-0.06664002},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Nikolay Yankov changed a subtask from In Dev to Won't do1 day ago","depth":22,"bounds":{"left":0.80568486,"top":1.0,"width":0.1356383,"height":-0.044293642},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Yankov changed a subtask from In Dev to Won't do","depth":23,"bounds":{"left":0.80568486,"top":1.0,"width":0.13164894,"height":-0.04549086},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1 day ago","depth":23,"bounds":{"left":0.80568486,"top":1.0,"width":0.1349734,"height":-0.04549086},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"[BE] Add dash symbol between name and period in the title","depth":22,"bounds":{"left":0.80568486,"top":1.0,"width":0.13547207,"height":-0.076217055},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[BE] Add dash symbol between name and period in the title","depth":25,"bounds":{"left":0.811004,"top":1.0,"width":0.13015293,"height":-0.077414155},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20679 • Won't do","depth":22,"bounds":{"left":0.80568486,"top":1.0,"width":0.039893616,"height":-0.09217882},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20679 • Won't do","depth":24,"bounds":{"left":0.80568486,"top":1.0,"width":0.039893616,"height":-0.09417403},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Mark as read","depth":22,"bounds":{"left":0.94132316,"top":1.0,"width":0.010638298,"height":-0.044293642},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"+1 assignee update from Nikolay Yankov","depth":23,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"+1 assignee update from Nikolay Yankov","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Older","depth":18,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Older","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Nikolay Yankov assigned a subtask to you 1 week ago","depth":22,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about this user","depth":23,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Nikolay Yankov assigned a subtask to you1 week ago","depth":22,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Yankov assigned a subtask to you","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1 week ago","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"[BE] Endpoint for \"I'm interested\"","depth":22,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[BE] Endpoint for \"I'm interested\"","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20674 • Ready for Dev","depth":22,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20674 • Ready for Dev","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Mark as read","depth":22,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.96143615,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.9665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.9734042,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.97855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.98537236,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.99052525,"top":0.06344773,"width":0.009474754,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.08361037,"top":0.09976058,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.09424867,"top":0.10574621,"width":0.01662234,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Recent","depth":12,"bounds":{"left":0.08361037,"top":0.12529927,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.09424867,"top":0.13128492,"width":0.015458777,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Starred","depth":12,"bounds":{"left":0.08361037,"top":0.15083799,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.09424867,"top":0.15682362,"width":0.016456118,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.08361037,"top":0.1763767,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.09424867,"top":0.18236233,"width":0.011635638,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.15309176,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.08361037,"top":0.2019154,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"bounds":{"left":0.09424867,"top":0.20790103,"width":0.016456118,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.13646941,"top":0.20510775,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.14577793,"top":0.20510775,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.08959442,"top":0.23423783,"width":0.013464096,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"bounds":{"left":0.08759973,"top":0.2529928,"width":0.0674867,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"bounds":{"left":0.09823803,"top":0.25897846,"width":0.032081116,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"bounds":{"left":0.08892952,"top":0.25618514,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create board","depth":18,"bounds":{"left":0.15508644,"top":0.25618514,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"bounds":{"left":0.16240026,"top":0.25618514,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"bounds":{"left":0.08759973,"top":0.27853152,"width":0.0674867,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Service-Desk","depth":20,"bounds":{"left":0.09823803,"top":0.28451717,"width":0.03025266,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"bounds":{"left":0.14577793,"top":0.28172386,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Queues","depth":21,"bounds":{"left":0.09158909,"top":0.30407023,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Queues","depth":24,"bounds":{"left":0.1022274,"top":0.31005585,"width":0.017121011,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Create","depth":22,"bounds":{"left":0.15309176,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More for queues","depth":22,"bounds":{"left":0.15442154,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More for queues","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service requests","depth":21,"bounds":{"left":0.09158909,"top":0.32960895,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service requests","depth":24,"bounds":{"left":0.1022274,"top":0.33559456,"width":0.03756649,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Create","depth":22,"bounds":{"left":0.15309176,"top":0.33280128,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More for service requests","depth":22,"bounds":{"left":0.15442154,"top":0.33280128,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More for service requests","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Incidents","depth":22,"bounds":{"left":0.09158909,"top":0.35514766,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Incidents","depth":25,"bounds":{"left":0.1022274,"top":0.36113328,"width":0.021276595,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Create","depth":23,"bounds":{"left":0.15309176,"top":0.35834,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More for incidents","depth":23,"bounds":{"left":0.15442154,"top":0.35834,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More for incidents","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reports","depth":19,"bounds":{"left":0.09158909,"top":0.38068634,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reports","depth":22,"bounds":{"left":0.1022274,"top":0.386672,"width":0.017287234,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for reports","depth":20,"bounds":{"left":0.15309176,"top":0.38387868,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for reports","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Operations","depth":19,"bounds":{"left":0.09158909,"top":0.40622506,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Operations","depth":22,"bounds":{"left":0.1022274,"top":0.4122107,"width":0.02443484,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for operations","depth":20,"bounds":{"left":0.15309176,"top":0.4094174,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for operations","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Knowledge Base","depth":19,"bounds":{"left":0.09158909,"top":0.43176377,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Knowledge Base","depth":22,"bounds":{"left":0.1022274,"top":0.43774942,"width":0.03723404,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for knowledge base","depth":20,"bounds":{"left":0.15309176,"top":0.4349561,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for knowledge base","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Customers","depth":19,"bounds":{"left":0.09158909,"top":0.45730248,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Customers","depth":22,"bounds":{"left":0.1022274,"top":0.4632881,"width":0.024268618,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for customers","depth":20,"bounds":{"left":0.15309176,"top":0.46049482,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for customers","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Channels","depth":19,"bounds":{"left":0.09158909,"top":0.4828412,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Channels","depth":22,"bounds":{"left":0.1022274,"top":0.4888268,"width":0.020944148,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Email logs","depth":19,"bounds":{"left":0.09158909,"top":0.5083799,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Email logs","depth":22,"bounds":{"left":0.1022274,"top":0.5143655,"width":0.022606382,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for customer notification logs","depth":20,"bounds":{"left":0.15309176,"top":0.51157224,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for customer notification logs","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Developer escalations","depth":19,"bounds":{"left":0.09158909,"top":0.5339186,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Developer escalations","depth":22,"bounds":{"left":0.1022274,"top":0.53990424,"width":0.04920213,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for developer escalations","depth":20,"bounds":{"left":0.15309176,"top":0.5371109,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for developer escalations","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Slack integration","depth":19,"bounds":{"left":0.09158909,"top":0.5594573,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Slack integration","depth":22,"bounds":{"left":0.1022274,"top":0.5654429,"width":0.03723404,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Slack integration","depth":20,"bounds":{"left":0.15309176,"top":0.56264967,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Slack integration","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reporting Center","depth":19,"bounds":{"left":0.09158909,"top":0.584996,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reporting Center","depth":22,"bounds":{"left":0.1022274,"top":0.59098166,"width":0.037898935,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Reporting Center","depth":20,"bounds":{"left":0.15309176,"top":0.58818835,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Reporting Center","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add shortcut","depth":19,"bounds":{"left":0.09158909,"top":0.6105347,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add shortcut","depth":22,"bounds":{"left":0.1022274,"top":0.61652035,"width":0.028922873,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for developer escalations","depth":20,"bounds":{"left":0.15309176,"top":0.61372703,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for developer escalations","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Archived work items","depth":19,"bounds":{"left":0.09158909,"top":0.6360734,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Archived work items","depth":22,"bounds":{"left":0.1022274,"top":0.6420591,"width":0.045545213,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for archived work items","depth":20,"bounds":{"left":0.15309176,"top":0.6392658,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for archived work items","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More spaces","depth":17,"bounds":{"left":0.08759973,"top":0.66161215,"width":0.0674867,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"bounds":{"left":0.09823803,"top":0.6675978,"width":0.028756648,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"bounds":{"left":0.08361037,"top":0.68715084,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Filters","depth":15,"bounds":{"left":0.09424867,"top":0.69313645,"width":0.013796543,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":13,"bounds":{"left":0.15309176,"top":0.6903432,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dashboards","depth":12,"bounds":{"left":0.08361037,"top":0.7126895,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dashboards","depth":15,"bounds":{"left":0.09424867,"top":0.7186752,"width":0.026761968,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create dashboard","depth":13,"bounds":{"left":0.15508644,"top":0.7158819,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create dashboard","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dashboards","depth":13,"bounds":{"left":0.16240026,"top":0.7158819,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dashboards","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Operations","depth":12,"bounds":{"left":0.08361037,"top":0.73822826,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Operations","depth":15,"bounds":{"left":0.09424867,"top":0.7442139,"width":0.02443484,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Operations","depth":13,"bounds":{"left":0.15309176,"top":0.74142057,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Operations","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Confluence , (opens new window)","depth":13,"bounds":{"left":0.08361037,"top":0.773344,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Confluence","depth":17,"bounds":{"left":0.09424867,"top":0.7793296,"width":0.025764627,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.08361037,"top":0.7869114,"width":0.04837101,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Teams , (opens new window)","depth":13,"bounds":{"left":0.08361037,"top":0.79888266,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Teams","depth":17,"bounds":{"left":0.09424867,"top":0.80486834,"width":0.014793883,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.08361037,"top":0.8124501,"width":0.04837101,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"open menu","depth":14,"bounds":{"left":0.14378324,"top":0.802075,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"open menu","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Customise sidebar","depth":12,"bounds":{"left":0.08361037,"top":0.8339984,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Customise sidebar","depth":15,"bounds":{"left":0.09424867,"top":0.83998406,"width":0.04155585,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Resize side navigation panel","depth":13,"bounds":{"left":0.2109375,"top":0.0981644,"width":0.062333778,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Spaces","depth":15,"bounds":{"left":0.26861703,"top":0.0933759,"width":0.013962766,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Spaces","depth":17,"bounds":{"left":0.26861703,"top":0.09696728,"width":0.013962766,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.28440824,"top":0.09577015,"width":0.0016622341,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Service-Desk Service-Desk","depth":15,"bounds":{"left":0.28989363,"top":0.0933759,"width":0.032912236,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk","depth":17,"bounds":{"left":0.29720744,"top":0.09696728,"width":0.025598405,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.3246343,"top":0.09577015,"width":0.0016622341,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Bug - Change work type","depth":15,"bounds":{"left":0.328125,"top":0.0933759,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"SRD-6793","depth":15,"bounds":{"left":0.33610374,"top":0.0933759,"width":0.019448139,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SRD-6793","depth":17,"bounds":{"left":0.33610374,"top":0.09696728,"width":0.019448139,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link","depth":16,"bounds":{"left":0.3542221,"top":0.096169196,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Les Mills activity types not pulling in- edit summary, edit","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Les Mills activity types not pulling in","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Les Mills activity types not pulling in","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Link work item","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Link work item","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Link web pages and more","depth":12,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Link web pages and more","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add form","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add form","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add design","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add design","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Create","depth":13,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Add app","depth":12,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Stoyan Tomov","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"raised this request","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"via","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jira","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Hide details","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hide details","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View request in portal","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"View request in portal","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Description","depth":11,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Description","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit Description, edit","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey team,","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"While testing something on Les Mills’s instance, I saw that we are not pulling in their activity types when a new Playbook is created.","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I tried creating “","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LMUS","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CX","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Playbook test” Playbook (ID 5515), but no activity types got pulled in.","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"When I tried reproducing the same on our Jiminny instance, the activity types appeared.","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Can someone please check why we are not pulling the activity types for Les Mills?","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Data Centre","depth":12,"bounds":{"left":0.27426863,"top":0.0,"width":0.02642952,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"bounds":{"left":0.3046875,"top":0.0,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Data Centre","depth":12,"bounds":{"left":0.42137632,"top":0.0,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"US","depth":14,"bounds":{"left":0.42303857,"top":0.0,"width":0.006482713,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Steps to reproduce","depth":11,"bounds":{"left":0.27426863,"top":0.0,"width":0.042386968,"height":0.015163607},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Steps to reproduce","depth":12,"bounds":{"left":0.27426863,"top":0.0,"width":0.042386968,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"bounds":{"left":0.3179854,"top":0.0,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Steps to reproduce, edit","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create a new playbook in Les Mills's instance","depth":11,"bounds":{"left":0.27426863,"top":0.0,"width":0.11303192,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Customer type","depth":12,"bounds":{"left":0.27426863,"top":0.0103751,"width":0.032912236,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"bounds":{"left":0.31117022,"top":0.011173184,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Customer type","depth":12,"bounds":{"left":0.42137632,"top":0.01715882,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise","depth":14,"bounds":{"left":0.42303857,"top":0.0103751,"width":0.02244016,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actual outcome","depth":12,"bounds":{"left":0.27426863,"top":0.04868316,"width":0.03474069,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"bounds":{"left":0.31299868,"top":0.049481247,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Actual outcome","depth":12,"bounds":{"left":0.42137632,"top":0.05546688,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"No activity types are being imported upon new Playbook creation","depth":12,"bounds":{"left":0.42137632,"top":0.04868316,"width":0.14361702,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Expected outcome","depth":12,"bounds":{"left":0.27426863,"top":0.08699122,"width":0.04155585,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"bounds":{"left":0.31981382,"top":0.087789305,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Expected outcome","depth":12,"bounds":{"left":0.42137632,"top":0.09377494,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"The activity types to get imported","depth":12,"bounds":{"left":0.42137632,"top":0.08699122,"width":0.07430186,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Severity level","depth":12,"bounds":{"left":0.27426863,"top":0.12529927,"width":0.029753989,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"bounds":{"left":0.30801198,"top":0.12609737,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Severity level","depth":12,"bounds":{"left":0.42137632,"top":0.132083,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"S2","depth":14,"bounds":{"left":0.42303857,"top":0.12529927,"width":0.005817819,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Impact","depth":11,"bounds":{"left":0.26861703,"top":0.17797287,"width":0.015957447,"height":0.014764565},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Impact","depth":12,"bounds":{"left":0.26861703,"top":0.1783719,"width":0.015957447,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"bounds":{"left":0.28590426,"top":0.17956904,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Impact, edit","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"None","depth":12,"bounds":{"left":0.26861703,"top":0.2019154,"width":0.011635638,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Root cause","depth":11,"bounds":{"left":0.26861703,"top":0.2406225,"width":0.024767287,"height":0.014764565},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Root cause","depth":12,"bounds":{"left":0.26861703,"top":0.24102154,"width":0.024767287,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"bounds":{"left":0.2947141,"top":0.24261771,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit Root cause, edit","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"We have no access to FieldDefinition (needed to sync activity types).","depth":11,"bounds":{"left":0.26861703,"top":0.26456505,"width":0.17170878,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Linked work items","depth":12,"bounds":{"left":0.26861703,"top":0.30407023,"width":0.04654255,"height":0.015961692},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Linked work items","depth":13,"bounds":{"left":0.26861703,"top":0.3044693,"width":0.04654255,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Link a work item","depth":13,"bounds":{"left":0.6397939,"top":0.30327216,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Link a work item","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"relates to","depth":11,"bounds":{"left":0.26861703,"top":0.32881084,"width":0.3784907,"height":0.012769354},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"relates to","depth":12,"bounds":{"left":0.26861703,"top":0.3292099,"width":0.017952127,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20698 is not done","depth":14,"bounds":{"left":0.27958778,"top":0.35794094,"width":0.021775266,"height":0.01396648},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20698","depth":15,"bounds":{"left":0.27958778,"top":0.35794094,"width":0.021775266,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Les Mills activity types not pulling in","depth":14,"bounds":{"left":0.3040226,"top":0.34876296,"width":0.25299203,"height":0.031923383},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Les Mills activity types not pulling in","depth":17,"bounds":{"left":0.3046875,"top":0.3575419,"width":0.079288565,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Deployed - Change status","depth":15,"bounds":{"left":0.56831783,"top":0.35953712,"width":0.027094414,"height":0.012769354},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEPLOYED","depth":19,"bounds":{"left":0.5696476,"top":0.3603352,"width":0.019780586,"height":0.011173184},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unlink work item","depth":13,"bounds":{"left":0.63613695,"top":0.35834,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Activity","depth":13,"bounds":{"left":0.26861703,"top":0.40063846,"width":0.019780586,"height":0.015961692},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity","depth":14,"bounds":{"left":0.26861703,"top":0.4010375,"width":0.019780586,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All","depth":14,"bounds":{"left":0.26961437,"top":0.42218676,"width":0.013962766,"height":0.0207502},"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All","depth":16,"bounds":{"left":0.27393618,"top":0.42577812,"width":0.005319149,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Comments","depth":14,"bounds":{"left":0.28424203,"top":0.42218676,"width":0.032413565,"height":0.0207502},"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Comments","depth":16,"bounds":{"left":0.28856382,"top":0.42577812,"width":0.023769947,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"History","depth":14,"bounds":{"left":0.31732047,"top":0.42218676,"width":0.02443484,"height":0.0207502},"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"History","depth":16,"bounds":{"left":0.32164228,"top":0.42577812,"width":0.015791224,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Work log","depth":14,"bounds":{"left":0.34242022,"top":0.42218676,"width":0.02825798,"height":0.0207502},"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Work log","depth":16,"bounds":{"left":0.34674203,"top":0.42577812,"width":0.019614361,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Approvals","depth":14,"bounds":{"left":0.37134308,"top":0.42218676,"width":0.030751329,"height":0.0207502},"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Approvals","depth":16,"bounds":{"left":0.3756649,"top":0.42577812,"width":0.022107713,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Atlassian Intelligence Summarise 3 comments","depth":13,"bounds":{"left":0.57014626,"top":0.42617717,"width":0.06698803,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarise 3 comments","depth":15,"bounds":{"left":0.5794548,"top":0.42897046,"width":0.053690158,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Newest first Newest first","depth":13,"bounds":{"left":0.6397939,"top":0.42617717,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Newest first","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add internal note","depth":15,"bounds":{"left":0.28224733,"top":0.4688747,"width":0.046043884,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add internal note","depth":17,"bounds":{"left":0.2862367,"top":0.47486034,"width":0.038065158,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.32829124,"top":0.47486034,"width":0.0043218085,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Reply to customer","depth":15,"bounds":{"left":0.33261302,"top":0.4688747,"width":0.048204787,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reply to customer","depth":17,"bounds":{"left":0.3366024,"top":0.47486034,"width":0.040226065,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add attachment","depth":15,"bounds":{"left":0.6341423,"top":0.46847567,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pro tip:","depth":16,"bounds":{"left":0.2819149,"top":0.50319237,"width":0.013796543,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"press","depth":15,"bounds":{"left":0.29571143,"top":0.50319237,"width":0.012632979,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"M","depth":17,"bounds":{"left":0.3096742,"top":0.5039904,"width":0.0033244682,"height":0.011173184},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to comment","depth":15,"bounds":{"left":0.31432846,"top":0.50319237,"width":0.023603724,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"More information about Galya Dimitrova 12 minutes ago Internal note Copy link to comment","depth":17,"bounds":{"left":0.28590426,"top":0.5494813,"width":0.35920876,"height":0.019952115},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about Galya Dimitrova","depth":20,"bounds":{"left":0.28590426,"top":0.5514765,"width":0.036236703,"height":0.015961692},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Galya Dimitrova","depth":22,"bounds":{"left":0.28590426,"top":0.5526736,"width":0.034906916,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"12 minutes ago","depth":19,"bounds":{"left":0.32480052,"top":0.5526736,"width":0.032912236,"height":0.01396648},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Internal note","depth":20,"bounds":{"left":0.36835107,"top":0.5526736,"width":0.028424202,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link to comment","depth":21,"bounds":{"left":0.39677528,"top":0.5526736,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"The fix for the fallback is now live.","depth":19,"bounds":{"left":0.28590426,"top":0.57501996,"width":0.076296546,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Stoyan Tanev","depth":19,"bounds":{"left":0.28590426,"top":0.603751,"width":0.03723404,"height":0.01396648},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"@Stoyan Tanev","depth":21,"bounds":{"left":0.28723404,"top":0.603751,"width":0.034242023,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"will work with Les Mills to help them update the Owner access in their CRM","depth":19,"bounds":{"left":0.3231383,"top":0.603751,"width":0.1662234,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add reaction","depth":17,"bounds":{"left":0.28590426,"top":0.6252993,"width":0.010638298,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"·","depth":18,"bounds":{"left":0.29853722,"top":0.62769353,"width":0.0013297872,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit","depth":17,"bounds":{"left":0.3018617,"top":0.6268954,"width":0.00831117,"height":0.015961692},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Edit","depth":19,"bounds":{"left":0.3018617,"top":0.62769353,"width":0.00831117,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":18,"bounds":{"left":0.31216756,"top":0.62769353,"width":0.0013297872,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":17,"bounds":{"left":0.31549203,"top":0.6268954,"width":0.014295213,"height":0.015961692},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Delete","depth":19,"bounds":{"left":0.31549203,"top":0.62769353,"width":0.014295213,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"More information about Lukas Kovalik 4 hours ago Edited Internal note Copy link to comment","depth":17,"bounds":{"left":0.28590426,"top":0.67478055,"width":0.35920876,"height":0.019553073},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about Lukas Kovalik","depth":20,"bounds":{"left":0.28590426,"top":0.67677575,"width":0.03158245,"height":0.015961692},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Lukas Kovalik","depth":22,"bounds":{"left":0.28590426,"top":0.6775738,"width":0.03025266,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"4 hours ago","depth":19,"bounds":{"left":0.32014626,"top":0.6775738,"width":0.02642952,"height":0.01396648},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Edited","depth":20,"bounds":{"left":0.35056517,"top":0.6775738,"width":0.013796543,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Internal note","depth":20,"bounds":{"left":0.375,"top":0.6775738,"width":0.02825798,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link to comment","depth":21,"bounds":{"left":0.40325797,"top":0.67797285,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pulsar seems to be working fine. I created new playbooks, and the fields were populated, including the one for which the client says the activity types were missing.","depth":19,"bounds":{"left":0.28590426,"top":0.70031923,"width":0.3430851,"height":0.03312051},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"For Les Mills, that is a different story. The team owner we use for sync has no permission to access","depth":19,"bounds":{"left":0.28590426,"top":0.7482043,"width":0.21924867,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FieldDefinition","depth":20,"bounds":{"left":0.50515294,"top":0.7482043,"width":0.03307846,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"via the Tooling API. There is a fallback logic that populates activity types from our database if the API request fails. However, the changed access permissions will cause other problems for us. The client also doesn't seem to have access to the","depth":19,"bounds":{"left":0.28590426,"top":0.7482043,"width":0.35854387,"height":0.05227454},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Organization","depth":20,"bounds":{"left":0.3650266,"top":0.7865124,"width":0.02925532,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". Therefore, we can’t sync team metadata successfully.","depth":19,"bounds":{"left":0.39428192,"top":0.7865124,"width":0.12134308,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Turn on wrap","depth":20,"bounds":{"left":0.61984706,"top":0.8172386,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Copy as text","depth":21,"bounds":{"left":0.63181514,"top":0.8172386,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":21,"bounds":{"left":0.28856382,"top":0.82083,"width":0.0026595744,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[2026-04-21 06:39:44] production.ERROR: [Salesforce] Request exception [404] The requested resource does not exist {\"url\":\"https://lesmills.my.salesforce.com/services/data/v50.0/sobjects/Organization/00D90000000fUszEAE?fields=InstanceName,OrganizationType,IsSandbox\", ... }","depth":21,"bounds":{"left":0.29654256,"top":0.82083,"width":0.7034575,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add reaction","depth":17,"bounds":{"left":0.28590426,"top":0.849162,"width":0.010638298,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"·","depth":18,"bounds":{"left":0.29853722,"top":0.8519553,"width":0.0013297872,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit","depth":17,"bounds":{"left":0.3018617,"top":0.8507582,"width":0.00831117,"height":0.015961692},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Edit","depth":19,"bounds":{"left":0.3018617,"top":0.8519553,"width":0.00831117,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":18,"bounds":{"left":0.31216756,"top":0.8519553,"width":0.0013297872,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":17,"bounds":{"left":0.31549203,"top":0.8507582,"width":0.014295213,"height":0.015961692},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Delete","depth":19,"bounds":{"left":0.31549203,"top":0.8519553,"width":0.014295213,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"More information about Stoyan Tomov 5 days ago Internal note Copy link to comment","depth":17,"bounds":{"left":0.28590426,"top":0.89864326,"width":0.35920876,"height":0.019952115},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about Stoyan Tomov","depth":20,"bounds":{"left":0.28590426,"top":0.90063846,"width":0.03274601,"height":0.015961692},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Stoyan Tomov","depth":22,"bounds":{"left":0.28590426,"top":0.9018356,"width":0.03158245,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"5 days ago","depth":19,"bounds":{"left":0.32130983,"top":0.9018356,"width":0.024102394,"height":0.01396648},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Internal note","depth":20,"bounds":{"left":0.35605052,"top":0.9018356,"width":0.028424202,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link to comment","depth":21,"bounds":{"left":0.38447472,"top":0.9018356,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"FYI, Pulsar Group (EU) is facing the same issue.","depth":19,"bounds":{"left":0.28590426,"top":0.92418194,"width":0.10688165,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add reaction","depth":17,"bounds":{"left":0.28590426,"top":0.94573027,"width":0.010638298,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"·","depth":18,"bounds":{"left":0.29853722,"top":0.9481245,"width":0.0013297872,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit","depth":17,"bounds":{"left":0.3018617,"top":0.9473264,"width":0.00831117,"height":0.015961692},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Edit","depth":19,"bounds":{"left":0.3018617,"top":0.9481245,"width":0.00831117,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"·","depth":18,"bounds":{"left":0.31216756,"top":0.9481245,"width":0.0013297872,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Delete","depth":17,"bounds":{"left":0.31549203,"top":0.9473264,"width":0.014295213,"height":0.015961692},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Delete","depth":19,"bounds":{"left":0.31549203,"top":0.9481245,"width":0.014295213,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Resize work item view side panel","depth":12,"bounds":{"left":0.7077792,"top":0.0981644,"width":0.07280585,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Give feedback","depth":13,"bounds":{"left":0.8166556,"top":0.10694334,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Give feedback","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Watch options: You are watching this issue, 4 people watching","depth":13,"bounds":{"left":0.83261305,"top":0.10694334,"width":0.018450798,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4","depth":17,"bounds":{"left":0.84391624,"top":0.11292897,"width":0.0031582448,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Vote options: No one has voted for this work item yet. Vote options: No one has voted for this work item yet.","depth":14,"bounds":{"left":0.8537234,"top":0.10694334,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Vote options: No one has voted for this work item yet.","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Share","depth":14,"bounds":{"left":0.86702126,"top":0.10694334,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Share","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Actions","depth":14,"bounds":{"left":0.8803192,"top":0.10694334,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Actions","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Ready for customer - Change status","depth":11,"bounds":{"left":0.66240025,"top":0.14365523,"width":0.057679523,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Ready for customer","depth":13,"bounds":{"left":0.66638964,"top":0.14964086,"width":0.043716755,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Automation","depth":11,"bounds":{"left":0.72273934,"top":0.14365523,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Automation","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Details","depth":14,"bounds":{"left":0.6653923,"top":0.18914606,"width":0.21725398,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXHeading","text":"Details","depth":17,"bounds":{"left":0.6747008,"top":0.19074222,"width":0.01861702,"height":0.015961692},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Details","depth":18,"bounds":{"left":0.6747008,"top":0.19114126,"width":0.017287234,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assignee","depth":12,"bounds":{"left":0.6690492,"top":0.23982441,"width":0.020611702,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Assignee Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.69232047,"top":0.24022347,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Stoyan Tanev- edit Assignee","depth":12,"bounds":{"left":0.75615025,"top":0.23663208,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about Stoyan Tanev","depth":13,"bounds":{"left":0.75615025,"top":0.22745411,"width":0.040226065,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Stoyan Tanev","depth":15,"bounds":{"left":0.76678854,"top":0.23024741,"width":0.029587766,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Assign to me","depth":11,"bounds":{"left":0.75615025,"top":0.2529928,"width":0.1278258,"height":0.015961692},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reporter","depth":12,"bounds":{"left":0.6690492,"top":0.28451717,"width":0.019281914,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Reporter Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.6909907,"top":0.2849162,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Stoyan Tomov- edit Reporter","depth":12,"bounds":{"left":0.75615025,"top":0.29090184,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about Stoyan Tomov","depth":13,"bounds":{"left":0.75615025,"top":0.28172386,"width":0.041888297,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Stoyan Tomov","depth":15,"bounds":{"left":0.76678854,"top":0.28451717,"width":0.03125,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Request Type","depth":12,"bounds":{"left":0.6690492,"top":0.3196329,"width":0.030418882,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about Request Type","depth":11,"bounds":{"left":0.7034575,"top":0.32083002,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Request Type Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.71143615,"top":0.3200319,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Request Type, Report a bug selected, edit","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Report a bug","depth":12,"bounds":{"left":0.7681183,"top":0.3196329,"width":0.02825798,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Knowledge base","depth":12,"bounds":{"left":0.6690492,"top":0.3547486,"width":0.03706782,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"View related articles","depth":14,"bounds":{"left":0.76944816,"top":0.3547486,"width":0.04454787,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":13,"bounds":{"left":0.87333775,"top":0.34876296,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Priority level","depth":12,"bounds":{"left":0.6690492,"top":0.38986433,"width":0.027759308,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Priority level Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.6994681,"top":0.39026338,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Priority level","depth":12,"bounds":{"left":0.75615025,"top":0.396249,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"P2 Medium","depth":14,"bounds":{"left":0.7578125,"top":0.38986433,"width":0.024767287,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dev Team","depth":12,"bounds":{"left":0.6690492,"top":0.42498004,"width":0.022107713,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Dev Team Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.6938165,"top":0.4253791,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Dev Team","depth":12,"bounds":{"left":0.75615025,"top":0.43136472,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform team","depth":14,"bounds":{"left":0.7578125,"top":0.42498004,"width":0.030585106,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Organization","depth":12,"bounds":{"left":0.6690492,"top":0.46009576,"width":0.028424202,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"bounds":{"left":0.70146275,"top":0.46049482,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Organization Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.7094415,"top":0.46049482,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Organization","depth":12,"bounds":{"left":0.75615025,"top":0.46648043,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Les Mills","depth":12,"bounds":{"left":0.75615025,"top":0.46009576,"width":0.019115692,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Canny Links","depth":12,"bounds":{"left":0.6690492,"top":0.49521148,"width":0.027260639,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":13,"bounds":{"left":0.75615025,"top":0.49521148,"width":0.013131649,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Canny Links","depth":13,"bounds":{"left":0.7692819,"top":0.49521148,"width":0.027759308,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More fields","depth":14,"bounds":{"left":0.6653923,"top":0.5482841,"width":0.22257313,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"More fields","depth":17,"bounds":{"left":0.6747008,"top":0.54988027,"width":0.029587766,"height":0.015961692},"help_text":"","role_description":"heading","subrole":"AXUnknown"}]...
|
8801034244368379645
|
-4309249639229792123
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 2 Q2 - Platform Team - Scrum Board Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
[JY-20372] AI Reports > Empty page design and promotion - Jira
[JY-20372] AI Reports > Empty page design and promotion - Jira
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Jiminny MCP Connector - Product - Confluence
Jiminny MCP Connector - Product - Confluence
Jiminny Mail
Jiminny Mail
[JY-20500] Batch initial sync for Salesforce - Jira
[JY-20500] Batch initial sync for Salesforce - Jira
Feed — jiminny — Sentry
Feed — jiminny — Sentry
Jiminny
Jiminny
Pipelines - jiminny/app
Pipelines - jiminny/app
Formalize
Formalize
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
Notifications
Notifications
Notifications
Notifications
Only show unread
Only show unread
Open notifications in a new tab
more
Direct
Direct
Watching
Watching
Today
Today
Galya Dimitrova unassigned you from a bug 14 minutes ago
More information about this user
Galya Dimitrova unassigned you from a bug14 minutes ago
Galya Dimitrova unassigned you from a bug
14 minutes ago
Les Mills activity types not pulling in
Les Mills activity types not pulling in
SRD-6793 • In Progress
SRD-6793 • In Progress
Mark as read
+1 comment from Stoyan Tomov
+1 comment from Stoyan Tomov
Nikolay Yankov changed a bug from Code Review to Deployed 3 hours ago
More information about this user
Nikolay Yankov changed a bug from Code Review to Deployed3 hours ago
Nikolay Yankov changed a bug from Code Review to Deployed
3 hours ago
Les Mills activity types not pulling in
Les Mills activity types not pulling in
JY-20698 • Deployed
JY-20698 • Deployed
Mark as read
+3 updates from Stefka Stoyanova
+3 updates from Stefka Stoyanova
Aneliya Angelova changed a work item from Done to In QA 4 hours ago
More information about this user
Aneliya Angelova changed a work item from Done to In QA4 hours ago
Aneliya Angelova changed a work item from Done to In QA
4 hours ago
Report ignores frequency-based period and uses all Saved Search activities regardless of time period
Report ignores frequency-based period and uses all Saved Search activities regardless of time period
JY-20702 • In QA
JY-20702 • In QA
Mark as read
+3 updates from Aneliya Angelova
+3 updates from Aneliya Angelova
Aneliya Angelova changed a work item from Done to Done 4 hours ago
More information about this user
Aneliya Angelova changed a work item from Done to Done4 hours ago
Aneliya Angelova changed a work item from Done to Done
4 hours ago
Incorrect "expiration date" error is displayed when changing frequency of report template with valid 1-year expiry
Incorrect "expiration date" error is displayed when changing frequency of report template with valid 1-year expiry
JY-20694 • Done
JY-20694 • Done
Mark as read
+1 assignee update from Nikolay Yankov
+1 assignee update from Nikolay Yankov
Automation for Jira changed a bug from Ready for customer to Closed 4 hours ago
More information about this user
Automation for Jira changed a bug from Ready for customer to Closed4 hours ago
Automation for Jira changed a bug from Ready for customer to Closed
4 hours ago
Issue with reconnecting Zoho
Issue with reconnecting Zoho
SRD-6787 • Closed
SRD-6787 • Closed
Mark as read
Yesterday
Yesterday
Georgi Bayraktarov commented on a bug 1 day ago
More information about this user
Georgi Bayraktarov commented on a bug1 day ago
Georgi Bayraktarov commented on a bug
1 day ago
Issue with reconnecting Zoho
Issue with reconnecting Zoho
JY-20692 • Code Review
JY-20692 • Code Review
Mark as read
Morning team! As I still don’t have an update for the customer, they’re now asking if we can postpone their payment until they can gain access to the platform. I need to know if this will take longer so I can speak with Claire about a postponed payment. Thank you in advance!
Morning team! As I still don’t have an update for the customer, they’re now asking if we can postpone their payment until they can gain access to the platform. I need to know if this will take longer so I can speak with Claire about a postponed payment. Thank you in advance!
React with thumbs up emoji
React with clapping hands emoji
React with fire emoji
React with red heart emoji
Add reaction
Reply
Reply
View thread
View thread
+3 updates from Stefka Stoyanova and others
+3 updates from Stefka Stoyanova and others
Nikolay Yankov changed a subtask from In Dev to Won't do 1 day ago
More information about this user
Nikolay Yankov changed a subtask from In Dev to Won't do1 day ago
Nikolay Yankov changed a subtask from In Dev to Won't do
1 day ago
[BE] Add dash symbol between name and period in the title
[BE] Add dash symbol between name and period in the title
JY-20679 • Won't do
JY-20679 • Won't do
Mark as read
+1 assignee update from Nikolay Yankov
+1 assignee update from Nikolay Yankov
Older
Older
Nikolay Yankov assigned a subtask to you 1 week ago
More information about this user
Nikolay Yankov assigned a subtask to you1 week ago
Nikolay Yankov assigned a subtask to you
1 week ago
[BE] Endpoint for "I'm interested"
[BE] Endpoint for "I'm interested"
JY-20674 • Ready for Dev
JY-20674 • Ready for Dev
Mark as read
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
Queues
Queues
Create
Create
More for queues
More for queues
Service requests
Service requests
Create
Create
More for service requests
More for service requests
Incidents
Incidents
Create
Create
More for incidents
More for incidents
Reports
Reports
More actions for reports
More actions for reports
Operations
Operations
More actions for operations
More actions for operations
Knowledge Base
Knowledge Base
More actions for knowledge base
More actions for knowledge base
Customers
Customers
More actions for customers
More actions for customers
Channels
Channels
Email logs
Email logs
More actions for customer notification logs
More actions for customer notification logs
Developer escalations
Developer escalations
More actions for developer escalations
More actions for developer escalations
Slack integration
Slack integration
More actions for Slack integration
More actions for Slack integration
Reporting Center
Reporting Center
More actions for Reporting Center
More actions for Reporting Center
Add shortcut
Add shortcut
More actions for developer escalations
More actions for developer escalations
Archived work items
Archived work items
More actions for archived work items
More actions for archived work items
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Service-Desk Service-Desk
Service-Desk
/
Bug - Change work type
SRD-6793
SRD-6793
Copy link
Les Mills activity types not pulling in- edit summary, edit
Les Mills activity types not pulling in
Les Mills activity types not pulling in
Link work item
Link work item
Link web pages and more
Link web pages and more
Add form
Add form
Add design
Add design
Create
Create
Add app
Stoyan Tomov
raised this request
via
Jira
Hide details
Hide details
View request in portal
View request in portal
Description
Description
Edit Description, edit
Hey team,
While testing something on Les Mills’s instance, I saw that we are not pulling in their activity types when a new Playbook is created.
I tried creating “
LMUS
CX
Playbook test” Playbook (ID 5515), but no activity types got pulled in.
When I tried reproducing the same on our Jiminny instance, the activity types appeared.
Can someone please check why we are not pulling the activity types for Les Mills?
Data Centre
More information about
Edit Data Centre
US
Steps to reproduce
Steps to reproduce
More information about
Edit Steps to reproduce, edit
Create a new playbook in Les Mills's instance
Customer type
More information about
Edit Customer type
Enterprise
Actual outcome
More information about
Edit Actual outcome
No activity types are being imported upon new Playbook creation
Expected outcome
More information about
Edit Expected outcome
The activity types to get imported
Severity level
More information about
Edit Severity level
S2
Impact
Impact
More information about
Edit Impact, edit
None
Root cause
Root cause
More information about
Edit Root cause, edit
We have no access to FieldDefinition (needed to sync activity types).
Linked work items
Linked work items
Link a work item
Link a work item
relates to
relates to
JY-20698 is not done
JY-20698
Les Mills activity types not pulling in
Les Mills activity types not pulling in
Deployed - Change status
DEPLOYED
Unlink work item
Activity
Activity
All
All
Comments
Comments
History
History
Work log
Work log
Approvals
Approvals
Atlassian Intelligence Summarise 3 comments
Summarise 3 comments
Newest first Newest first
Newest first
Add internal note
Add internal note
/
Reply to customer
Reply to customer
Add attachment
Pro tip:
press
M
to comment
More information about Galya Dimitrova 12 minutes ago Internal note Copy link to comment
More information about Galya Dimitrova
Galya Dimitrova
12 minutes ago
Internal note
Copy link to comment
The fix for the fallback is now live.
Stoyan Tanev
@Stoyan Tanev
will work with Les Mills to help them update the Owner access in their CRM
Add reaction
·
Edit
Edit
·
Delete
Delete
More information about Lukas Kovalik 4 hours ago Edited Internal note Copy link to comment
More information about Lukas Kovalik
Lukas Kovalik
4 hours ago
Edited
Internal note
Copy link to comment
Pulsar seems to be working fine. I created new playbooks, and the fields were populated, including the one for which the client says the activity types were missing.
For Les Mills, that is a different story. The team owner we use for sync has no permission to access
FieldDefinition
via the Tooling API. There is a fallback logic that populates activity types from our database if the API request fails. However, the changed access permissions will cause other problems for us. The client also doesn't seem to have access to the
Organization
. Therefore, we can’t sync team metadata successfully.
Turn on wrap
Copy as text
1
[2026-04-21 06:39:44] production.ERROR: [Salesforce] Request exception [404] The requested resource does not exist {"url":"https://lesmills.my.salesforce.com/services/data/v50.0/sobjects/Organization/00D90000000fUszEAE?fields=InstanceName,OrganizationType,IsSandbox", ... }
Add reaction
·
Edit
Edit
·
Delete
Delete
More information about Stoyan Tomov 5 days ago Internal note Copy link to comment
More information about Stoyan Tomov
Stoyan Tomov
5 days ago
Internal note
Copy link to comment
FYI, Pulsar Group (EU) is facing the same issue.
Add reaction
·
Edit
Edit
·
Delete
Delete
Resize work item view side panel
Give feedback
Give feedback
Watch options: You are watching this issue, 4 people watching
4
Vote options: No one has voted for this work item yet. Vote options: No one has voted for this work item yet.
Vote options: No one has voted for this work item yet.
Share
Share
Actions
Actions
Ready for customer - Change status
Ready for customer
Automation
Automation
Details
Details
Details
Assignee
Assignee Pin to top. Only you can see pinned fields.
Stoyan Tanev- edit Assignee
More information about Stoyan Tanev
Stoyan Tanev
Assign to me
Reporter
Reporter Pin to top. Only you can see pinned fields.
Stoyan Tomov- edit Reporter
More information about Stoyan Tomov
Stoyan Tomov
Request Type
More information about Request Type
Request Type Pin to top. Only you can see pinned fields.
Edit Request Type, Report a bug selected, edit
Report a bug
Knowledge base
View related articles
Expand
Priority level
Priority level Pin to top. Only you can see pinned fields.
Edit Priority level
P2 Medium
Dev Team
Dev Team Pin to top. Only you can see pinned fields.
Edit Dev Team
Platform team
Organization
More information about
Organization Pin to top. Only you can see pinned fields.
Edit Organization
Les Mills
Canny Links
Open
Canny Links
More fields
More fields...
|
64072
|
|
1723
|
36
|
68
|
2026-04-11T17:51:36.926216+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775929896926_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShelllEditViewSessionScriptsProfilesWindowHe iTerm2ShelllEditViewSessionScriptsProfilesWindowHelp(ahl100% CSat 11 Apr 20:51:36181DOCKER0 ₴12026-04-11T18:41:59.011341Z2026-04-11T18:41:59.165278Z2026-04-11718:41:59116530272026-04-11T18:41:59.165322Z2026-04-11T18:41:59.165338Z2026-04-11T18:41:59.165390Z2026-04-11T18:41:59.953409Z2026-04-11T18:42:00.086573Z2026-04-11T18:42:03.873046Z2026-04-11T18:42:03.873524Z2026-04-11T18:42:58.898798Z2026-04-11T18:43:01.495401Z2026-04-11718:43:05103791642026-04-11T18:43:05.70131372026-04-11T18:43:05.869321Z2026-04-11T18:44:34.370623Z2026-04-11T18:44:37.039894Z2026-04-11T18:44:43.637666Z2026-04-11T18:46:22.830023Z2026-04-11T18:46:24.74642522026-04-11718:46:26.145427Z2026-04-11T18:46:29.154628Z2026-04-11T18:46:45.161217Z2026-04-11T18:46:47.291011Z2026-04-11T18:46:58.867582Z2026-04-11718:47:33.87325622026-04-11T18:48:05.793658ZDEV (-zsh)O 82APP (-zsh)• 83-zsh84-zsh• 86-zsh₴7-zshINFOscreenpipe_engine::hot_frame_cache:INFOhot_frame_cache:warmedwith 838framecoveragefrom 2026-04-10 15:41:58.867994 UTCINFOscreenpipe_engine::vision_manager::manager:entries,Starting vision recordingfor monitor1 (1440x900)screenpipe_engine::vision_manager::manager:Startingevent-driven capture formonitor 1 (device: monitor_1)INFOscreenpipe_engine::vision_manager::manager:Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listINFOINFOscreenpipe_engine::vision_manager::monitor_watcher:Starting monitor watcher (polling every 5 seconds)screenpipe_engine::event_driven_capture: event-driven capture startedfor monitor 1 (device: monitor_1)INFOsck_rs::stream_manager:persistent SCK stream started for display 1 (1440x900, 2fps)INFOscreenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=1362, dur=65msINFOscreenpipe_engine::retention: retention: initialized with 14d retentionINFOscreenpipe:localretention auto-enabled (14 days)INFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: found 108eligibleframesINFOscreenpipe_engine::event_driven_capture: contentdedup:INFOskipping capture for monitor 1 Chash=810635838678462500,trigger=clipboard)screenpipe_engine::snapshot_compaction: snapshotcompaction: 99 frames,18.9MB → 1.8MB (10.7x), 99 JPEGSdeletedINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 8 frames,1.5MB → 0.4MB (3.7x), 8 JPEGs deletedINFOscreenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 1 (hash=8059017237112085187, trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: contentdedup: skipping capture for monitor 1 (hash=1954793808959611333,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: contentdedup: skipping capture for monitor 1 (hash=1954793808959611333, trigger=clipboard)INFOscreenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 1 (hash=-6150475841360271668, trigger=visual_change)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6692613549932102593,trigger=click)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6692613549932102593,trigger=click)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6692613549932102593, trigger=visual_change)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6692613549932102593, trigger=visual_change)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6037013225245471503, trigger=click)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6037013225245471503, trigger=visual_change)INFO screenpipe_engine::server: api_usage_5min: 3 requestsINFOscreenpipe_engine::retention: retention: cleaning up data before 2026-03-28T15:47:33.873226+00:00 (14d retention)INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 18eligible frames*8[1] + terminatednpx screenpipe@latest record --disable-audiolukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-statuszsh: command not found: sp-statuslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ source ~/.zprofilePoetry could not find a pyproject.toml file in /Users/lukas/.screenpipe/data/data or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-status{"Sratesst tusa thy""audio_status": "disabled""Last_frame": "2026-04-11T20:43:56+03:00","uptime": 1091.390855333,"fps": 0.19424755023745877,"frames": 212}lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ |...
|
NULL
|
8801026212922814987
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShelllEditViewSessionScriptsProfilesWindowHe iTerm2ShelllEditViewSessionScriptsProfilesWindowHelp(ahl100% CSat 11 Apr 20:51:36181DOCKER0 ₴12026-04-11T18:41:59.011341Z2026-04-11T18:41:59.165278Z2026-04-11718:41:59116530272026-04-11T18:41:59.165322Z2026-04-11T18:41:59.165338Z2026-04-11T18:41:59.165390Z2026-04-11T18:41:59.953409Z2026-04-11T18:42:00.086573Z2026-04-11T18:42:03.873046Z2026-04-11T18:42:03.873524Z2026-04-11T18:42:58.898798Z2026-04-11T18:43:01.495401Z2026-04-11718:43:05103791642026-04-11T18:43:05.70131372026-04-11T18:43:05.869321Z2026-04-11T18:44:34.370623Z2026-04-11T18:44:37.039894Z2026-04-11T18:44:43.637666Z2026-04-11T18:46:22.830023Z2026-04-11T18:46:24.74642522026-04-11718:46:26.145427Z2026-04-11T18:46:29.154628Z2026-04-11T18:46:45.161217Z2026-04-11T18:46:47.291011Z2026-04-11T18:46:58.867582Z2026-04-11718:47:33.87325622026-04-11T18:48:05.793658ZDEV (-zsh)O 82APP (-zsh)• 83-zsh84-zsh• 86-zsh₴7-zshINFOscreenpipe_engine::hot_frame_cache:INFOhot_frame_cache:warmedwith 838framecoveragefrom 2026-04-10 15:41:58.867994 UTCINFOscreenpipe_engine::vision_manager::manager:entries,Starting vision recordingfor monitor1 (1440x900)screenpipe_engine::vision_manager::manager:Startingevent-driven capture formonitor 1 (device: monitor_1)INFOscreenpipe_engine::vision_manager::manager:Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listINFOINFOscreenpipe_engine::vision_manager::monitor_watcher:Starting monitor watcher (polling every 5 seconds)screenpipe_engine::event_driven_capture: event-driven capture startedfor monitor 1 (device: monitor_1)INFOsck_rs::stream_manager:persistent SCK stream started for display 1 (1440x900, 2fps)INFOscreenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=1362, dur=65msINFOscreenpipe_engine::retention: retention: initialized with 14d retentionINFOscreenpipe:localretention auto-enabled (14 days)INFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: found 108eligibleframesINFOscreenpipe_engine::event_driven_capture: contentdedup:INFOskipping capture for monitor 1 Chash=810635838678462500,trigger=clipboard)screenpipe_engine::snapshot_compaction: snapshotcompaction: 99 frames,18.9MB → 1.8MB (10.7x), 99 JPEGSdeletedINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 8 frames,1.5MB → 0.4MB (3.7x), 8 JPEGs deletedINFOscreenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 1 (hash=8059017237112085187, trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: contentdedup: skipping capture for monitor 1 (hash=1954793808959611333,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: contentdedup: skipping capture for monitor 1 (hash=1954793808959611333, trigger=clipboard)INFOscreenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 1 (hash=-6150475841360271668, trigger=visual_change)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6692613549932102593,trigger=click)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6692613549932102593,trigger=click)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6692613549932102593, trigger=visual_change)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6692613549932102593, trigger=visual_change)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6037013225245471503, trigger=click)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6037013225245471503, trigger=visual_change)INFO screenpipe_engine::server: api_usage_5min: 3 requestsINFOscreenpipe_engine::retention: retention: cleaning up data before 2026-03-28T15:47:33.873226+00:00 (14d retention)INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 18eligible frames*8[1] + terminatednpx screenpipe@latest record --disable-audiolukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-statuszsh: command not found: sp-statuslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ source ~/.zprofilePoetry could not find a pyproject.toml file in /Users/lukas/.screenpipe/data/data or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-status{"Sratesst tusa thy""audio_status": "disabled""Last_frame": "2026-04-11T20:43:56+03:00","uptime": 1091.390855333,"fps": 0.19424755023745877,"frames": 212}lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ |...
|
NULL
|
|
13450
|
292
|
26
|
2026-04-14T12:24:40.247638+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776169480247_m1.jpg...
|
iTerm2
|
ec2-user@ip-10-30-93-249:~
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Sat Apr 11 12:38:35 on ttys007
Poetry Last login: Sat Apr 11 12:38:35 on ttys007
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ vstg
Warning: Permanently added 'jiminny-stage-ecs1' (ED25519) to the list of known hosts.
A newer 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 info
, #_
~\_ ####_
~~ \_#####\
~~ \###|
~~ \#/ ___ Amazon Linux 2023 (ECS Optimized)
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
For documentation, visit [URL_WITH_CREDENTIALS] php artisan automated-reports
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Started {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Found 2 daily reports to process {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"fa7417aa-538e-49ab-8827-77235637a6f9","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"63e6d70b-b7cb-4dfa-8443-53453e6c4054","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Completed {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
root@fee51d2e1f17:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@73b64f5d54a3:/home/jiminny# php artisan automated-reports
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Started {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Found 3 daily reports to process {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"fa7417aa-538e-49ab-8827-77235637a6f9","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"63e6d70b-b7cb-4dfa-8443-53453e6c4054","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:04] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"7e7846e2-c0ea-4040-88f4-0ae14b66ade8","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:04] staging.INFO: [automated-reports] Completed {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
root@73b64f5d54a3:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@c78a087b1345:/home/jiminny# php artisan automated-reports
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Started {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Found 3 daily reports to process {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"fa7417aa-538e-49ab-8827-77235637a6f9","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"63e6d70b-b7cb-4dfa-8443-53453e6c4054","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"7e7846e2-c0ea-4040-88f4-0ae14b66ade8","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Completed {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
root@c78a087b1345:/home/jiminny# php artisan automated-reports --report-id 35
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Started {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[automated-reports] Automated report found Test 6
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Found 1 daily reports to process {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"7e7846e2-c0ea-4040-88f4-0ae14b66ade8","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Completed {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
root@c78a087b1345:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@b79a4bdd6905:/home/jiminny# php artisan automated-reports --report-id 71b8bbf5-23f4-41df-b637-693765e7aa78
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Started {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[automated-reports] Automated report found Tuesday report
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Found 1 daily reports to process {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"71b8bbf5-23f4-41df-b637-693765e7aa78","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Completed {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
root@b79a4bdd6905:/home/jiminny# php artisan automated-reports:send
root@b79a4bdd6905:/home/jiminny# php artisan tinker
Psy Shell v0.12.21 (PHP 8.3.30 — cli) by Justin Hileman
New PHP manual is available (latest: 3.0.5). Update with `doc --update-manual`
> $repo = app(AutomatedReportsRepository::class);
[!] Aliasing 'AutomatedReportsRepository' to 'Jiminny\Repositories\AutomatedReportsRepository' for this Tinker session.
= Jiminny\Repositories\AutomatedReportsRepository {#15215}
> $repo->getGeneratedNotSentResults();
= Illuminate\Database\Eloquent\Collection {#15683
all: [
Jiminny\Models\AutomatedReportResult {#15703
id: 14,
uuid: b"C^Ð>!€]¢ª1vàý\x1F6Ï",
report_id: 8,
name: "Exec Summary - 5 Sep 2024 - 10 Mar 2026 - All",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"team_id":1,"request_id":"21805da2-d03e-435e-aa31-76e0fd1f36cf","report_type":"exec_summary","media_types":["pdf","podcast"],"from_date":"2024-09-05T00:00:00+00:00","to_date":"2026-03-10T23:59:59+00:00","group_ids":[],"call_deal_stage":[],"current_deal_stage":[],"deal_min_value":null,"deal_max_value":null,"call_types":["conference","dialer"],"call_duration_min_seconds":null,"call_duration_max_seconds":null,"special_requirements":"","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"5 Sep 2024 - 10 Mar 2026","playbook_categories":[],"custom_name":null}",
response: "{"request_id":"21805da2-d03e-435e-aa31-76e0fd1f36cf","status":"completed","timestamp":"2026-03-26T14:10:58.983895+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf.MD","report_type":"exec_summary","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf.pdf","podcast_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.txt","podcast_audio_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.mp3","podcast_ssml_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.ssml"}",
requested_at: "2026-03-26 14:06:35",
generated_at: "2026-03-26 14:10:59",
sent_at: null,
created_at: "2026-03-26 14:06:35",
updated_at: "2026-03-26 14:10:59",
report: Jiminny\Models\AutomatedReport {#15197
id: 8,
#uuid: b"FWNçôý\x1Dªš–+âga”d",
team_id: 1,
type: "exec_summary",
status: 1,
frequency: "one_off",
from: "2024-09-05 00:00:00",
to: "2026-03-10 00:00:00",
deal_value_min: null,
deal_value_max: null,
call_types: "["conference","dialer"]",
media_types: "["pdf","podcast"]",
call_duration_min: null,
call_duration_max: null,
groups: "[]",
playbook_categories: "[]",
deal_at_call_stages: "[]",
current_deal_stages: "[]",
recipients: "{"users":[]}",
jiminny_recipients: "{"users":[]}",
additional_prompt_input: "",
custom_name: null,
activity_search_id: null,
ask_anything_prompt_id: null,
expires_at: null,
created_by: 3248,
created_at: "2026-03-26 14:06:32",
updated_at: "2026-03-26 14:06:32",
deleted_at: null,
},
},
Jiminny\Models\AutomatedReportResult {#15701
id: 43,
uuid: b"GJ—\x14?§ÄÉøN_0A}Ý",
report_id: 33,
name: "Ask Jiminny test report - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"test","call_ids":["54964443","54964442","54214348","54747783","54792639","54355211","54214356","54214362","54373257","54276602","54547166","54357434","54638437","54439335","54184628","54435911","54547029","54580912","54314274","53918272","54447612","54561308","52175046","54531535","54495620","52753147","52175055","54358692","54020412","54424068","54222599","53852885","52697526","53944212","54222051","54125650","54284918","54137014","54142985","53755346","54078231","52175067","54021634","53971125","54077453","54010996","52759195","53028445","54065927","52175082","53920744","54020314","52714861","53765213","53926207","52175042","52948707","53602066","53824355","53769276","53048081","52263045","52564798","53604424","53575428","52167221","53545307","53545088","53606423","52956249","52894249","52568574","52527230","53058889","52760234","52263048","52451159","52175073","52358247","52189687","52232025","51980465","52430474","52363300","52346694","52359342","52231503","52255239","50934254","52303651","52258169","51958927","52242714","52239097","52083853","52083904","51765719","52072580","51525359","51806803"],"team_id":1,"request_id":"3fa7c4c9-9714-474a-adf8-4e5f30417ddd","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Ask Jiminny test report"}",
response: "{"request_id":"3fa7c4c9-9714-474a-adf8-4e5f30417ddd","status":"completed","timestamp":"2026-04-14T07:49:35.099004+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/3fa7c4c9-9714-474a-adf8-4e5f30417ddd.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/3fa7c4c9-9714-474a-adf8-4e5f30417ddd.pdf"}",
requested_at: "2026-04-14 07:49:04",
generated_at: "2026-04-14 07:49:35",
sent_at: null,
created_at: "2026-04-14 07:49:03",
updated_at: "2026-04-14 07:49:35",
report: Jiminny\Models\AutomatedReport {#15196
id: 33,
#uuid: b"I«SŽút\x17ªˆ'w#V7¦ù",
team_id: 1,
type: "ask_jiminny",
status: 1,
frequency: "daily",
from: null,
to: null,
deal_value_min: null,
deal_value_max: null,
call_types: "[]",
media_types: "["pdf"]",
call_duration_min: null,
call_duration_max: null,
groups: "[9]",
playbook_categories: null,
deal_at_call_stages: null,
current_deal_stages: null,
recipients: "{"users":[7160,23309]}",
jiminny_recipients: null,
additional_prompt_input: null,
custom_name: "Ask Jiminny test report",
activity_search_id: 26912,
ask_anything_prompt_id: 62,
expires_at: "2026-04-30",
created_by: 7160,
created_at: "2026-04-08 10:12:30",
updated_at: "2026-04-08 10:12:30",
deleted_at: null,
},
},
Jiminny\Models\AutomatedReportResult {#15700
id: 45,
uuid: b"A¢•M8z~‚*l\x01÷ð\0s",
report_id: 33,
name: "Ask Jiminny test report - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"test","call_ids":["54964443","54964442","54214348","54747783","54792639","54355211","54214356","54214362","54373257","54276602","54547166","54357434","54638437","54439335","54184628","54435911","54547029","54580912","54314274","53918272","54447612","54561308","52175046","54531535","54495620","52753147","52175055","54358692","54020412","54424068","54222599","53852885","52697526","53944212","54222051","54125650","54284918","54137014","54142985","53755346","54078231","52175067","54021634","53971125","54077453","54010996","52759195","53028445","54065927","52175082","53920744","54020314","52714861","53765213","53926207","52175042","52948707","53602066","53824355","53769276","53048081","52263045","52564798","53604424","53575428","52167221","53545307","53545088","53606423","52956249","52894249","52568574","52527230","53058889","52760234","52263048","52451159","52175073","52358247","52189687","52232025","51980465","52430474","52363300","52346694","52359342","52231503","52255239","50934254","52303651","52258169","51958927","52242714","52239097","52083853","52083904","51765719","52072580","51525359","51806803"],"team_id":1,"request_id":"38817a7e-954d-41a2-822a-6c01f7f00073","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Ask Jiminny test report"}",
response: "{"request_id":"38817a7e-954d-41a2-822a-6c01f7f00073","status":"completed","timestamp":"2026-04-14T08:41:46.594895+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/38817a7e-954d-41a2-822a-6c01f7f00073.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/38817a7e-954d-41a2-822a-6c01f7f00073.pdf"}",
requested_at: "2026-04-14 08:41:11",
generated_at: "2026-04-14 08:41:46",
sent_at: null,
created_at: "2026-04-14 08:41:11",
updated_at: "2026-04-14 08:41:46",
report: Jiminny\Models\AutomatedReport {#15196},
},
Jiminny\Models\AutomatedReportResult {#15705
id: 47,
uuid: b"D‘\x10[̘^–𔹧-ÞÝB",
report_id: 33,
name: "Ask Jiminny test report - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"test","call_ids":["54964443","54964442","54214348","54747783","54792639","54355211","54214356","54214362","54373257","54276602","54547166","54357434","54638437","54439335","54184628","54435911","54547029","54580912","54314274","53918272","54447612","54561308","52175046","54531535","54495620","52753147","52175055","54358692","54020412","54424068","54222599","53852885","52697526","53944212","54222051","54125650","54284918","54137014","54142985","53755346","54078231","52175067","54021634","53971125","54077453","54010996","52759195","53028445","54065927","52175082","53920744","54020314","52714861","53765213","53926207","52175042","52948707","53602066","53824355","53769276","53048081","52263045","52564798","53604424","53575428","52167221","53545307","53545088","53606423","52956249","52894249","52568574","52527230","53058889","52760234","52263048","52451159","52175073","52358247","52189687","52232025","51980465","52430474","52363300","52346694","52359342","52231503","52255239","50934254","52303651","52258169","51958927","52242714","52239097","52083853","52083904","51765719","52072580","51525359","51806803"],"team_id":1,"request_id":"cc985e96-105b-4491-9a94-b9a72ddedd42","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Ask Jiminny test report"}",
response: "{"request_id":"cc985e96-105b-4491-9a94-b9a72ddedd42","status":"completed","timestamp":"2026-04-14T10:46:38.602513+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/cc985e96-105b-4491-9a94-b9a72ddedd42.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/cc985e96-105b-4491-9a94-b9a72ddedd42.pdf"}",
requested_at: "2026-04-14 10:46:09",
generated_at: "2026-04-14 10:46:38",
sent_at: null,
created_at: "2026-04-14 10:46:08",
updated_at: "2026-04-14 10:46:38",
report: Jiminny\Models\AutomatedReport {#15196},
},
Jiminny\Models\AutomatedReportResult {#15687
id: 49,
uuid: b"K·Ì¬Ò\vþþ«PÈ»‰\x19™s",
report_id: 35,
name: "Test 6 - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"Please make a summary for all calls","call_ids":["49880280","49104686","48360159","47193308","44762288","43862984","41678335","41310991","39940631","39779620","39389894","39106205","38745110","38510502"],"team_id":1,"request_id":"d20bfefe-ccac-4bb7-ab50-c8bb89199973","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Test 6"}",
response: "{"request_id":"d20bfefe-ccac-4bb7-ab50-c8bb89199973","status":"completed","timestamp":"2026-04-14T10:46:37.905336+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/d20bfefe-ccac-4bb7-ab50-c8bb89199973.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/d20bfefe-ccac-4bb7-ab50-c8bb89199973.pdf"}",
requested_at: "2026-04-14 10:46:16",
generated_at: "2026-04-14 10:46:37",
sent_at: null,
created_at: "2026-04-14 10:46:16",
updated_at: "2026-04-14 10:46:38",
report: Jiminny\Models\AutomatedReport {#15219
id: 35,
#uuid: b"""
@@Àê~xFâˆô\n
áKfè
""",
team_id: 1,
type: "ask_jiminny",
status: 1,
frequency: "daily",
from: null,
to: null,
deal_value_min: null,
deal_value_max: null,
call_types: "[]",
media_types: "["pdf"]",
call_duration_min: null,
call_duration_max: null,
groups: "[9]",
playbook_categories: null,
deal_at_call_stages: null,
current_deal_stages: null,
recipients: "{"users":[3248,23559]}",
jiminny_recipients: null,
additional_prompt_input: null,
custom_name: "Test 6",
activity_search_id: 10932,
ask_anything_prompt_id: 65,
expires_at: "2026-04-19",
created_by: 3248,
created_at: "2026-04-14 08:39:14",
updated_at: "2026-04-14 08:39:14",
deleted_at: null,
},
},
Jiminny\Models\AutomatedReportResult {#15686
id: 50,
uuid: b"GÙµ‚\{3‡p©ú1ÿÖŽ",
report_id: 35,
name: "Test 6 - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"Please make a summary for all calls","call_ids":["49880280","49104686","48360159","47193308","44762288","43862984","41678335","41310991","39940631","39779620","39389894","39106205","38745110","38510502"],"team_id":1,"request_id":"5c9d7b33-b582-47d9-8770-a9fa31ffd68d","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Test 6"}",
response: "{"request_id":"5c9d7b33-b582-47d9-8770-a9fa31ffd68d","status":"completed","timestamp":"2026-04-14T10:49:01.677577+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/5c9d7b33-b582-47d9-8770-a9fa31ffd68d.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/5c9d7b33-b582-47d9-8770-a9fa31ffd68d.pdf"}",
requested_at: "2026-04-14 10:48:43",
generated_at: "2026-04-14 10:49:01",
sent_at: null,
created_at: "2026-04-14 10:48:42",
updated_at: "2026-04-14 10:49:01",
report: Jiminny\Models\AutomatedReport {#15219},
},
Jiminny\Models\AutomatedReportResult {#15685
id: 51,
uuid: b"L\x13HSÏÖ»™ŸŽ¦¯Cár{",
report_id: 36,
name: "Tuesday report - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"test","call_ids":["54214348","54747783","54792639","54355211","54214356","54579532","54214362","54795501","54373257","54566775","54179068","54691680","54702966","54186485","54547166","54357434","54439335","54435911","54547029","54179299","54580912","54314274","53918272","54310744","54447612","54561308","52175046","54531535","54495620","52753147","53853301","52551697","52175055","54358692","54020412","54424068","54222599","53853298","53852885","53931221","54132327","53944212","54037186","54125650","54059512","53801108","54284918","52552430","54142985","53755346","52175067","54021634","52896288","52175051","54077453","52413114","54010996","53528248","54078291","53813598","54076266","53028445","54065927","53922780","53729434","53919824","53384442","52175082","53920744","54020314","52714861","54009217","53765213","53926207","52175042","52948707","53602066","53824355","53769276","53048081","53769369","53384450","52161199","52263045","52564798","50907426","53604424","53575428","52167221","52156369","53545307","52565625","53610225","53594648","53545088","52175041","52956249","52217425","52562272","52248293"],"team_id":1,"request_id":"cfd6bb99-4853-4c13-9f8e-a6af43e1727b","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Tuesday report"}",
response: "{"request_id":"cfd6bb99-4853-4c13-9f8e-a6af43e1727b","status":"completed","timestamp":"2026-04-14T11:23:03.951289+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/cfd6bb99-4853-4c13-9f8e-a6af43e1727b.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/cfd6bb99-4853-4c13-9f8e-a6af43e1727b.pdf"}",
requested_at: "2026-04-14 11:22:36",
generated_at: "2026-04-14 11:23:04",
sent_at: null,
created_at: "2026-04-14 11:22:36",
updated_at: "2026-04-14 11:23:04",
report: Jiminny\Models\AutomatedReport {#15221
id: 36,
#uuid: b"Aß#ôq¸»õ¶7i7eçªx",
team_id: 1,
type: "ask_jiminny",
status: 1,
frequency: "daily",
from: null,
to: null,
deal_value_min: null,
deal_value_max: null,
call_types: "[]",
media_types: "["pdf"]",
call_duration_min: null,
call_duration_max: null,
groups: "[]",
playbook_categories: null,
deal_at_call_stages: null,
current_deal_stages: null,
recipients: "{"users":[7160]}",
jiminny_recipients: null,
additional_prompt_input: null,
custom_name: "Tuesday report",
activity_search_id: 26913,
ask_anything_prompt_id: 62,
expires_at: "2026-04-30",
created_by: 7160,
created_at: "2026-04-14 11:20:20",
updated_at: "2026-04-14 11:20:20",
deleted_at: null,
},
},
],
}
> $repo->getGeneratedNotSentResults()->count();
= 7
> exit
INFO Goodbye.
root@b79a4bdd6905:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@d1ac6fe11762:/home/jiminny#
DOCKER
Close Tab
DEV (docker)
Close Tab
APP (-zsh)
Close Tab
ec2-user@ip-10-30-93-249:~ (nc)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
✳ Unable to access screenpipe activity data (claude)
Close Tab
⌥⌘1
ec2-user@ip-10-30-93-249:~...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Sat Apr 11 12:38:35 on ttys007\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ vstg\nWarning: Permanently added 'jiminny-stage-ecs1' (ED25519) to the list of known hosts.\n\nA newer release of \"Amazon Linux\" is available.\n Version 2023.10.20260105:\n Version 2023.10.20260120:\n Version 2023.10.20260202:\n Version 2023.10.20260216:\n Version 2023.10.20260302:\n Version 2023.10.20260325:\n Version 2023.10.20260330:\n Version 2023.11.20260406:\n Version 2023.11.20260413:\n Version 2023.8.20250707:\n Version 2023.8.20250715:\n Version 2023.8.20250721:\n Version 2023.8.20250808:\n Version 2023.8.20250818:\n Version 2023.8.20250908:\n Version 2023.8.20250915:\n Version 2023.9.20250929:\n Version 2023.9.20251014:\n Version 2023.9.20251020:\n Version 2023.9.20251027:\n Version 2023.9.20251105:\n Version 2023.9.20251110:\n Version 2023.9.20251117:\n Version 2023.9.20251208:\nRun \"/usr/bin/dnf check-release-update\" for full release and version update info\n , #_\n ~\\_ ####_\n ~~ \\_#####\\\n ~~ \\###|\n ~~ \\#/ ___ Amazon Linux 2023 (ECS Optimized)\n ~~ V~' '->\n ~~~ /\n ~~._. _/\n _/ _/\n _/m/'\n\nFor documentation, visit http://aws.amazon.com/documentation/ecs\n[ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@fee51d2e1f17:/home/jiminny# php artisan about\n\n Environment ...................................................................................................................................... \n Application Name ................................................................................................................. Jiminny Web App \n Laravel Version .......................................................................................................................... 12.54.1 \n PHP Version ............................................................................................................................... 8.3.30 \n Composer Version ............................................................................................................................... - \n Environment .............................................................................................................................. staging \n Debug Mode ................................................................................................................................... OFF \n URL ...................................................................................................................... app.staging.jiminny.com \n Maintenance Mode ............................................................................................................................. OFF \n Timezone ..................................................................................................................................... UTC \n Locale ..................................................................................................................................... en_US \n\n Cache ............................................................................................................................................ \n Config .................................................................................................................................... CACHED \n Events ................................................................................................................................ NOT CACHED \n Routes .................................................................................................................................... CACHED \n Views ..................................................................................................................................... CACHED \n\n Drivers .......................................................................................................................................... \n Broadcasting .............................................................................................................................. pusher \n Cache ...................................................................................................................................... redis \n Database ................................................................................................................................... mysql \n Logs .................................................................................................................................... errorlog \n Mail ......................................................................................................................................... ses \n Queue ........................................................................................................................................ sqs \n Session .................................................................................................................................... redis \n\n Storage .......................................................................................................................................... \n public/storage ........................................................................................................................ NOT LINKED \n\n Sentry ........................................................................................................................................... \n Enabled ...................................................................................................................................... YES \n Environment .............................................................................................................................. staging \n Laravel SDK Version ....................................................................................................................... 4.13.0 \n PHP SDK Version ........................................................................................................................... 4.13.0 \n Release ................................................................................................................................... 869720 \n Sample Rate Errors .......................................................................................................................... 100% \n Sample Rate Performance Monitoring ....................................................................................................... NOT SET \n Sample Rate Profiling .................................................................................................................... NOT SET \n Send Default PII ........................................................................................................................ DISABLED \n\nroot@fee51d2e1f17:/home/jiminny# php artisan automated-reports\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Started {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Found 2 daily reports to process {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"fa7417aa-538e-49ab-8827-77235637a6f9\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"63e6d70b-b7cb-4dfa-8443-53453e6c4054\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\nroot@fee51d2e1f17:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@73b64f5d54a3:/home/jiminny# php artisan automated-reports\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Started {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Found 3 daily reports to process {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"fa7417aa-538e-49ab-8827-77235637a6f9\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"63e6d70b-b7cb-4dfa-8443-53453e6c4054\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:04] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"7e7846e2-c0ea-4040-88f4-0ae14b66ade8\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:04] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\nroot@73b64f5d54a3:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@c78a087b1345:/home/jiminny# php artisan automated-reports\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Started {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Found 3 daily reports to process {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"fa7417aa-538e-49ab-8827-77235637a6f9\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"63e6d70b-b7cb-4dfa-8443-53453e6c4054\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"7e7846e2-c0ea-4040-88f4-0ae14b66ade8\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\nroot@c78a087b1345:/home/jiminny# php artisan automated-reports --report-id 35\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Started {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[automated-reports] Automated report found Test 6\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Found 1 daily reports to process {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"7e7846e2-c0ea-4040-88f4-0ae14b66ade8\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\nroot@c78a087b1345:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@b79a4bdd6905:/home/jiminny# php artisan automated-reports --report-id 71b8bbf5-23f4-41df-b637-693765e7aa78\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Started {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[automated-reports] Automated report found Tuesday report\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Found 1 daily reports to process {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"71b8bbf5-23f4-41df-b637-693765e7aa78\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\nroot@b79a4bdd6905:/home/jiminny# php artisan automated-reports:send\nroot@b79a4bdd6905:/home/jiminny# php artisan tinker\nPsy Shell v0.12.21 (PHP 8.3.30 — cli) by Justin Hileman\nNew PHP manual is available (latest: 3.0.5). Update with `doc --update-manual`\n> $repo = app(AutomatedReportsRepository::class);\n[!] Aliasing 'AutomatedReportsRepository' to 'Jiminny\\Repositories\\AutomatedReportsRepository' for this Tinker session.\n= Jiminny\\Repositories\\AutomatedReportsRepository {#15215}\n\n> $repo->getGeneratedNotSentResults();\n= Illuminate\\Database\\Eloquent\\Collection {#15683\n all: [\n Jiminny\\Models\\AutomatedReportResult {#15703\n id: 14,\n uuid: b\"C^Ð>!€]¢ª1vàý\\x1F6Ï\",\n report_id: 8,\n name: \"Exec Summary - 5 Sep 2024 - 10 Mar 2026 - All\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"team_id\":1,\"request_id\":\"21805da2-d03e-435e-aa31-76e0fd1f36cf\",\"report_type\":\"exec_summary\",\"media_types\":[\"pdf\",\"podcast\"],\"from_date\":\"2024-09-05T00:00:00+00:00\",\"to_date\":\"2026-03-10T23:59:59+00:00\",\"group_ids\":[],\"call_deal_stage\":[],\"current_deal_stage\":[],\"deal_min_value\":null,\"deal_max_value\":null,\"call_types\":[\"conference\",\"dialer\"],\"call_duration_min_seconds\":null,\"call_duration_max_seconds\":null,\"special_requirements\":\"\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"5 Sep 2024 - 10 Mar 2026\",\"playbook_categories\":[],\"custom_name\":null}\",\n response: \"{\"request_id\":\"21805da2-d03e-435e-aa31-76e0fd1f36cf\",\"status\":\"completed\",\"timestamp\":\"2026-03-26T14:10:58.983895+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf.MD\",\"report_type\":\"exec_summary\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf.pdf\",\"podcast_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.txt\",\"podcast_audio_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.mp3\",\"podcast_ssml_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.ssml\"}\",\n requested_at: \"2026-03-26 14:06:35\",\n generated_at: \"2026-03-26 14:10:59\",\n sent_at: null,\n created_at: \"2026-03-26 14:06:35\",\n updated_at: \"2026-03-26 14:10:59\",\n report: Jiminny\\Models\\AutomatedReport {#15197\n id: 8,\n #uuid: b\"FWNçôý\\x1Dªš–+âga”d\",\n team_id: 1,\n type: \"exec_summary\",\n status: 1,\n frequency: \"one_off\",\n from: \"2024-09-05 00:00:00\",\n to: \"2026-03-10 00:00:00\",\n deal_value_min: null,\n deal_value_max: null,\n call_types: \"[\"conference\",\"dialer\"]\",\n media_types: \"[\"pdf\",\"podcast\"]\",\n call_duration_min: null,\n call_duration_max: null,\n groups: \"[]\",\n playbook_categories: \"[]\",\n deal_at_call_stages: \"[]\",\n current_deal_stages: \"[]\",\n recipients: \"{\"users\":[]}\",\n jiminny_recipients: \"{\"users\":[]}\",\n additional_prompt_input: \"\",\n custom_name: null,\n activity_search_id: null,\n ask_anything_prompt_id: null,\n expires_at: null,\n created_by: 3248,\n created_at: \"2026-03-26 14:06:32\",\n updated_at: \"2026-03-26 14:06:32\",\n deleted_at: null,\n },\n },\n Jiminny\\Models\\AutomatedReportResult {#15701\n id: 43,\n uuid: b\"GJ—\\x14?§ÄÉøN_0A}Ý\",\n report_id: 33,\n name: \"Ask Jiminny test report - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"test\",\"call_ids\":[\"54964443\",\"54964442\",\"54214348\",\"54747783\",\"54792639\",\"54355211\",\"54214356\",\"54214362\",\"54373257\",\"54276602\",\"54547166\",\"54357434\",\"54638437\",\"54439335\",\"54184628\",\"54435911\",\"54547029\",\"54580912\",\"54314274\",\"53918272\",\"54447612\",\"54561308\",\"52175046\",\"54531535\",\"54495620\",\"52753147\",\"52175055\",\"54358692\",\"54020412\",\"54424068\",\"54222599\",\"53852885\",\"52697526\",\"53944212\",\"54222051\",\"54125650\",\"54284918\",\"54137014\",\"54142985\",\"53755346\",\"54078231\",\"52175067\",\"54021634\",\"53971125\",\"54077453\",\"54010996\",\"52759195\",\"53028445\",\"54065927\",\"52175082\",\"53920744\",\"54020314\",\"52714861\",\"53765213\",\"53926207\",\"52175042\",\"52948707\",\"53602066\",\"53824355\",\"53769276\",\"53048081\",\"52263045\",\"52564798\",\"53604424\",\"53575428\",\"52167221\",\"53545307\",\"53545088\",\"53606423\",\"52956249\",\"52894249\",\"52568574\",\"52527230\",\"53058889\",\"52760234\",\"52263048\",\"52451159\",\"52175073\",\"52358247\",\"52189687\",\"52232025\",\"51980465\",\"52430474\",\"52363300\",\"52346694\",\"52359342\",\"52231503\",\"52255239\",\"50934254\",\"52303651\",\"52258169\",\"51958927\",\"52242714\",\"52239097\",\"52083853\",\"52083904\",\"51765719\",\"52072580\",\"51525359\",\"51806803\"],\"team_id\":1,\"request_id\":\"3fa7c4c9-9714-474a-adf8-4e5f30417ddd\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Ask Jiminny test report\"}\",\n response: \"{\"request_id\":\"3fa7c4c9-9714-474a-adf8-4e5f30417ddd\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T07:49:35.099004+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/3fa7c4c9-9714-474a-adf8-4e5f30417ddd.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/3fa7c4c9-9714-474a-adf8-4e5f30417ddd.pdf\"}\",\n requested_at: \"2026-04-14 07:49:04\",\n generated_at: \"2026-04-14 07:49:35\",\n sent_at: null,\n created_at: \"2026-04-14 07:49:03\",\n updated_at: \"2026-04-14 07:49:35\",\n report: Jiminny\\Models\\AutomatedReport {#15196\n id: 33,\n #uuid: b\"I«SŽút\\x17ªˆ'w#V7¦ù\",\n team_id: 1,\n type: \"ask_jiminny\",\n status: 1,\n frequency: \"daily\",\n from: null,\n to: null,\n deal_value_min: null,\n deal_value_max: null,\n call_types: \"[]\",\n media_types: \"[\"pdf\"]\",\n call_duration_min: null,\n call_duration_max: null,\n groups: \"[9]\",\n playbook_categories: null,\n deal_at_call_stages: null,\n current_deal_stages: null,\n recipients: \"{\"users\":[7160,23309]}\",\n jiminny_recipients: null,\n additional_prompt_input: null,\n custom_name: \"Ask Jiminny test report\",\n activity_search_id: 26912,\n ask_anything_prompt_id: 62,\n expires_at: \"2026-04-30\",\n created_by: 7160,\n created_at: \"2026-04-08 10:12:30\",\n updated_at: \"2026-04-08 10:12:30\",\n deleted_at: null,\n },\n },\n Jiminny\\Models\\AutomatedReportResult {#15700\n id: 45,\n uuid: b\"A¢•M8z~‚*l\\x01÷ð\\0s\",\n report_id: 33,\n name: \"Ask Jiminny test report - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"test\",\"call_ids\":[\"54964443\",\"54964442\",\"54214348\",\"54747783\",\"54792639\",\"54355211\",\"54214356\",\"54214362\",\"54373257\",\"54276602\",\"54547166\",\"54357434\",\"54638437\",\"54439335\",\"54184628\",\"54435911\",\"54547029\",\"54580912\",\"54314274\",\"53918272\",\"54447612\",\"54561308\",\"52175046\",\"54531535\",\"54495620\",\"52753147\",\"52175055\",\"54358692\",\"54020412\",\"54424068\",\"54222599\",\"53852885\",\"52697526\",\"53944212\",\"54222051\",\"54125650\",\"54284918\",\"54137014\",\"54142985\",\"53755346\",\"54078231\",\"52175067\",\"54021634\",\"53971125\",\"54077453\",\"54010996\",\"52759195\",\"53028445\",\"54065927\",\"52175082\",\"53920744\",\"54020314\",\"52714861\",\"53765213\",\"53926207\",\"52175042\",\"52948707\",\"53602066\",\"53824355\",\"53769276\",\"53048081\",\"52263045\",\"52564798\",\"53604424\",\"53575428\",\"52167221\",\"53545307\",\"53545088\",\"53606423\",\"52956249\",\"52894249\",\"52568574\",\"52527230\",\"53058889\",\"52760234\",\"52263048\",\"52451159\",\"52175073\",\"52358247\",\"52189687\",\"52232025\",\"51980465\",\"52430474\",\"52363300\",\"52346694\",\"52359342\",\"52231503\",\"52255239\",\"50934254\",\"52303651\",\"52258169\",\"51958927\",\"52242714\",\"52239097\",\"52083853\",\"52083904\",\"51765719\",\"52072580\",\"51525359\",\"51806803\"],\"team_id\":1,\"request_id\":\"38817a7e-954d-41a2-822a-6c01f7f00073\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Ask Jiminny test report\"}\",\n response: \"{\"request_id\":\"38817a7e-954d-41a2-822a-6c01f7f00073\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T08:41:46.594895+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/38817a7e-954d-41a2-822a-6c01f7f00073.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/38817a7e-954d-41a2-822a-6c01f7f00073.pdf\"}\",\n requested_at: \"2026-04-14 08:41:11\",\n generated_at: \"2026-04-14 08:41:46\",\n sent_at: null,\n created_at: \"2026-04-14 08:41:11\",\n updated_at: \"2026-04-14 08:41:46\",\n report: Jiminny\\Models\\AutomatedReport {#15196},\n },\n Jiminny\\Models\\AutomatedReportResult {#15705\n id: 47,\n uuid: b\"D‘\\x10[̘^–𔹧-ÞÝB\",\n report_id: 33,\n name: \"Ask Jiminny test report - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"test\",\"call_ids\":[\"54964443\",\"54964442\",\"54214348\",\"54747783\",\"54792639\",\"54355211\",\"54214356\",\"54214362\",\"54373257\",\"54276602\",\"54547166\",\"54357434\",\"54638437\",\"54439335\",\"54184628\",\"54435911\",\"54547029\",\"54580912\",\"54314274\",\"53918272\",\"54447612\",\"54561308\",\"52175046\",\"54531535\",\"54495620\",\"52753147\",\"52175055\",\"54358692\",\"54020412\",\"54424068\",\"54222599\",\"53852885\",\"52697526\",\"53944212\",\"54222051\",\"54125650\",\"54284918\",\"54137014\",\"54142985\",\"53755346\",\"54078231\",\"52175067\",\"54021634\",\"53971125\",\"54077453\",\"54010996\",\"52759195\",\"53028445\",\"54065927\",\"52175082\",\"53920744\",\"54020314\",\"52714861\",\"53765213\",\"53926207\",\"52175042\",\"52948707\",\"53602066\",\"53824355\",\"53769276\",\"53048081\",\"52263045\",\"52564798\",\"53604424\",\"53575428\",\"52167221\",\"53545307\",\"53545088\",\"53606423\",\"52956249\",\"52894249\",\"52568574\",\"52527230\",\"53058889\",\"52760234\",\"52263048\",\"52451159\",\"52175073\",\"52358247\",\"52189687\",\"52232025\",\"51980465\",\"52430474\",\"52363300\",\"52346694\",\"52359342\",\"52231503\",\"52255239\",\"50934254\",\"52303651\",\"52258169\",\"51958927\",\"52242714\",\"52239097\",\"52083853\",\"52083904\",\"51765719\",\"52072580\",\"51525359\",\"51806803\"],\"team_id\":1,\"request_id\":\"cc985e96-105b-4491-9a94-b9a72ddedd42\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Ask Jiminny test report\"}\",\n response: \"{\"request_id\":\"cc985e96-105b-4491-9a94-b9a72ddedd42\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T10:46:38.602513+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/cc985e96-105b-4491-9a94-b9a72ddedd42.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/cc985e96-105b-4491-9a94-b9a72ddedd42.pdf\"}\",\n requested_at: \"2026-04-14 10:46:09\",\n generated_at: \"2026-04-14 10:46:38\",\n sent_at: null,\n created_at: \"2026-04-14 10:46:08\",\n updated_at: \"2026-04-14 10:46:38\",\n report: Jiminny\\Models\\AutomatedReport {#15196},\n },\n Jiminny\\Models\\AutomatedReportResult {#15687\n id: 49,\n uuid: b\"K·Ì¬Ò\\vþþ«PÈ»‰\\x19™s\",\n report_id: 35,\n name: \"Test 6 - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"Please make a summary for all calls\",\"call_ids\":[\"49880280\",\"49104686\",\"48360159\",\"47193308\",\"44762288\",\"43862984\",\"41678335\",\"41310991\",\"39940631\",\"39779620\",\"39389894\",\"39106205\",\"38745110\",\"38510502\"],\"team_id\":1,\"request_id\":\"d20bfefe-ccac-4bb7-ab50-c8bb89199973\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Test 6\"}\",\n response: \"{\"request_id\":\"d20bfefe-ccac-4bb7-ab50-c8bb89199973\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T10:46:37.905336+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/d20bfefe-ccac-4bb7-ab50-c8bb89199973.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/d20bfefe-ccac-4bb7-ab50-c8bb89199973.pdf\"}\",\n requested_at: \"2026-04-14 10:46:16\",\n generated_at: \"2026-04-14 10:46:37\",\n sent_at: null,\n created_at: \"2026-04-14 10:46:16\",\n updated_at: \"2026-04-14 10:46:38\",\n report: Jiminny\\Models\\AutomatedReport {#15219\n id: 35,\n #uuid: b\"\"\"\n @@Àê~xFâˆô\\n\n áKfè\n \"\"\",\n team_id: 1,\n type: \"ask_jiminny\",\n status: 1,\n frequency: \"daily\",\n from: null,\n to: null,\n deal_value_min: null,\n deal_value_max: null,\n call_types: \"[]\",\n media_types: \"[\"pdf\"]\",\n call_duration_min: null,\n call_duration_max: null,\n groups: \"[9]\",\n playbook_categories: null,\n deal_at_call_stages: null,\n current_deal_stages: null,\n recipients: \"{\"users\":[3248,23559]}\",\n jiminny_recipients: null,\n additional_prompt_input: null,\n custom_name: \"Test 6\",\n activity_search_id: 10932,\n ask_anything_prompt_id: 65,\n expires_at: \"2026-04-19\",\n created_by: 3248,\n created_at: \"2026-04-14 08:39:14\",\n updated_at: \"2026-04-14 08:39:14\",\n deleted_at: null,\n },\n },\n Jiminny\\Models\\AutomatedReportResult {#15686\n id: 50,\n uuid: b\"GÙµ‚\\{3‡p©ú1ÿÖŽ\",\n report_id: 35,\n name: \"Test 6 - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"Please make a summary for all calls\",\"call_ids\":[\"49880280\",\"49104686\",\"48360159\",\"47193308\",\"44762288\",\"43862984\",\"41678335\",\"41310991\",\"39940631\",\"39779620\",\"39389894\",\"39106205\",\"38745110\",\"38510502\"],\"team_id\":1,\"request_id\":\"5c9d7b33-b582-47d9-8770-a9fa31ffd68d\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Test 6\"}\",\n response: \"{\"request_id\":\"5c9d7b33-b582-47d9-8770-a9fa31ffd68d\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T10:49:01.677577+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/5c9d7b33-b582-47d9-8770-a9fa31ffd68d.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/5c9d7b33-b582-47d9-8770-a9fa31ffd68d.pdf\"}\",\n requested_at: \"2026-04-14 10:48:43\",\n generated_at: \"2026-04-14 10:49:01\",\n sent_at: null,\n created_at: \"2026-04-14 10:48:42\",\n updated_at: \"2026-04-14 10:49:01\",\n report: Jiminny\\Models\\AutomatedReport {#15219},\n },\n Jiminny\\Models\\AutomatedReportResult {#15685\n id: 51,\n uuid: b\"L\\x13HSÏÖ»™ŸŽ¦¯Cár{\",\n report_id: 36,\n name: \"Tuesday report - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"test\",\"call_ids\":[\"54214348\",\"54747783\",\"54792639\",\"54355211\",\"54214356\",\"54579532\",\"54214362\",\"54795501\",\"54373257\",\"54566775\",\"54179068\",\"54691680\",\"54702966\",\"54186485\",\"54547166\",\"54357434\",\"54439335\",\"54435911\",\"54547029\",\"54179299\",\"54580912\",\"54314274\",\"53918272\",\"54310744\",\"54447612\",\"54561308\",\"52175046\",\"54531535\",\"54495620\",\"52753147\",\"53853301\",\"52551697\",\"52175055\",\"54358692\",\"54020412\",\"54424068\",\"54222599\",\"53853298\",\"53852885\",\"53931221\",\"54132327\",\"53944212\",\"54037186\",\"54125650\",\"54059512\",\"53801108\",\"54284918\",\"52552430\",\"54142985\",\"53755346\",\"52175067\",\"54021634\",\"52896288\",\"52175051\",\"54077453\",\"52413114\",\"54010996\",\"53528248\",\"54078291\",\"53813598\",\"54076266\",\"53028445\",\"54065927\",\"53922780\",\"53729434\",\"53919824\",\"53384442\",\"52175082\",\"53920744\",\"54020314\",\"52714861\",\"54009217\",\"53765213\",\"53926207\",\"52175042\",\"52948707\",\"53602066\",\"53824355\",\"53769276\",\"53048081\",\"53769369\",\"53384450\",\"52161199\",\"52263045\",\"52564798\",\"50907426\",\"53604424\",\"53575428\",\"52167221\",\"52156369\",\"53545307\",\"52565625\",\"53610225\",\"53594648\",\"53545088\",\"52175041\",\"52956249\",\"52217425\",\"52562272\",\"52248293\"],\"team_id\":1,\"request_id\":\"cfd6bb99-4853-4c13-9f8e-a6af43e1727b\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Tuesday report\"}\",\n response: \"{\"request_id\":\"cfd6bb99-4853-4c13-9f8e-a6af43e1727b\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T11:23:03.951289+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/cfd6bb99-4853-4c13-9f8e-a6af43e1727b.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/cfd6bb99-4853-4c13-9f8e-a6af43e1727b.pdf\"}\",\n requested_at: \"2026-04-14 11:22:36\",\n generated_at: \"2026-04-14 11:23:04\",\n sent_at: null,\n created_at: \"2026-04-14 11:22:36\",\n updated_at: \"2026-04-14 11:23:04\",\n report: Jiminny\\Models\\AutomatedReport {#15221\n id: 36,\n #uuid: b\"Aß#ôq¸»õ¶7i7eçªx\",\n team_id: 1,\n type: \"ask_jiminny\",\n status: 1,\n frequency: \"daily\",\n from: null,\n to: null,\n deal_value_min: null,\n deal_value_max: null,\n call_types: \"[]\",\n media_types: \"[\"pdf\"]\",\n call_duration_min: null,\n call_duration_max: null,\n groups: \"[]\",\n playbook_categories: null,\n deal_at_call_stages: null,\n current_deal_stages: null,\n recipients: \"{\"users\":[7160]}\",\n jiminny_recipients: null,\n additional_prompt_input: null,\n custom_name: \"Tuesday report\",\n activity_search_id: 26913,\n ask_anything_prompt_id: 62,\n expires_at: \"2026-04-30\",\n created_by: 7160,\n created_at: \"2026-04-14 11:20:20\",\n updated_at: \"2026-04-14 11:20:20\",\n deleted_at: null,\n },\n },\n ],\n }\n\n> $repo->getGeneratedNotSentResults()->count();\n= 7\n\n> exit\n\n INFO Goodbye.\n\nroot@b79a4bdd6905:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@d1ac6fe11762:/home/jiminny#","depth":4,"value":"Last login: Sat Apr 11 12:38:35 on ttys007\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ vstg\nWarning: Permanently added 'jiminny-stage-ecs1' (ED25519) to the list of known hosts.\n\nA newer release of \"Amazon Linux\" is available.\n Version 2023.10.20260105:\n Version 2023.10.20260120:\n Version 2023.10.20260202:\n Version 2023.10.20260216:\n Version 2023.10.20260302:\n Version 2023.10.20260325:\n Version 2023.10.20260330:\n Version 2023.11.20260406:\n Version 2023.11.20260413:\n Version 2023.8.20250707:\n Version 2023.8.20250715:\n Version 2023.8.20250721:\n Version 2023.8.20250808:\n Version 2023.8.20250818:\n Version 2023.8.20250908:\n Version 2023.8.20250915:\n Version 2023.9.20250929:\n Version 2023.9.20251014:\n Version 2023.9.20251020:\n Version 2023.9.20251027:\n Version 2023.9.20251105:\n Version 2023.9.20251110:\n Version 2023.9.20251117:\n Version 2023.9.20251208:\nRun \"/usr/bin/dnf check-release-update\" for full release and version update info\n , #_\n ~\\_ ####_\n ~~ \\_#####\\\n ~~ \\###|\n ~~ \\#/ ___ Amazon Linux 2023 (ECS Optimized)\n ~~ V~' '->\n ~~~ /\n ~~._. _/\n _/ _/\n _/m/'\n\nFor documentation, visit http://aws.amazon.com/documentation/ecs\n[ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@fee51d2e1f17:/home/jiminny# php artisan about\n\n Environment ...................................................................................................................................... \n Application Name ................................................................................................................. Jiminny Web App \n Laravel Version .......................................................................................................................... 12.54.1 \n PHP Version ............................................................................................................................... 8.3.30 \n Composer Version ............................................................................................................................... - \n Environment .............................................................................................................................. staging \n Debug Mode ................................................................................................................................... OFF \n URL ...................................................................................................................... app.staging.jiminny.com \n Maintenance Mode ............................................................................................................................. OFF \n Timezone ..................................................................................................................................... UTC \n Locale ..................................................................................................................................... en_US \n\n Cache ............................................................................................................................................ \n Config .................................................................................................................................... CACHED \n Events ................................................................................................................................ NOT CACHED \n Routes .................................................................................................................................... CACHED \n Views ..................................................................................................................................... CACHED \n\n Drivers .......................................................................................................................................... \n Broadcasting .............................................................................................................................. pusher \n Cache ...................................................................................................................................... redis \n Database ................................................................................................................................... mysql \n Logs .................................................................................................................................... errorlog \n Mail ......................................................................................................................................... ses \n Queue ........................................................................................................................................ sqs \n Session .................................................................................................................................... redis \n\n Storage .......................................................................................................................................... \n public/storage ........................................................................................................................ NOT LINKED \n\n Sentry ........................................................................................................................................... \n Enabled ...................................................................................................................................... YES \n Environment .............................................................................................................................. staging \n Laravel SDK Version ....................................................................................................................... 4.13.0 \n PHP SDK Version ........................................................................................................................... 4.13.0 \n Release ................................................................................................................................... 869720 \n Sample Rate Errors .......................................................................................................................... 100% \n Sample Rate Performance Monitoring ....................................................................................................... NOT SET \n Sample Rate Profiling .................................................................................................................... NOT SET \n Send Default PII ........................................................................................................................ DISABLED \n\nroot@fee51d2e1f17:/home/jiminny# php artisan automated-reports\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Started {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Found 2 daily reports to process {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"fa7417aa-538e-49ab-8827-77235637a6f9\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"63e6d70b-b7cb-4dfa-8443-53453e6c4054\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\nroot@fee51d2e1f17:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@73b64f5d54a3:/home/jiminny# php artisan automated-reports\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Started {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Found 3 daily reports to process {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"fa7417aa-538e-49ab-8827-77235637a6f9\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"63e6d70b-b7cb-4dfa-8443-53453e6c4054\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:04] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"7e7846e2-c0ea-4040-88f4-0ae14b66ade8\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:04] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\nroot@73b64f5d54a3:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@c78a087b1345:/home/jiminny# php artisan automated-reports\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Started {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Found 3 daily reports to process {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"fa7417aa-538e-49ab-8827-77235637a6f9\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"63e6d70b-b7cb-4dfa-8443-53453e6c4054\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"7e7846e2-c0ea-4040-88f4-0ae14b66ade8\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\nroot@c78a087b1345:/home/jiminny# php artisan automated-reports --report-id 35\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Started {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[automated-reports] Automated report found Test 6\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Found 1 daily reports to process {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"7e7846e2-c0ea-4040-88f4-0ae14b66ade8\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\nroot@c78a087b1345:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@b79a4bdd6905:/home/jiminny# php artisan automated-reports --report-id 71b8bbf5-23f4-41df-b637-693765e7aa78\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Started {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[automated-reports] Automated report found Tuesday report\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Found 1 daily reports to process {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"71b8bbf5-23f4-41df-b637-693765e7aa78\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\nroot@b79a4bdd6905:/home/jiminny# php artisan automated-reports:send\nroot@b79a4bdd6905:/home/jiminny# php artisan tinker\nPsy Shell v0.12.21 (PHP 8.3.30 — cli) by Justin Hileman\nNew PHP manual is available (latest: 3.0.5). Update with `doc --update-manual`\n> $repo = app(AutomatedReportsRepository::class);\n[!] Aliasing 'AutomatedReportsRepository' to 'Jiminny\\Repositories\\AutomatedReportsRepository' for this Tinker session.\n= Jiminny\\Repositories\\AutomatedReportsRepository {#15215}\n\n> $repo->getGeneratedNotSentResults();\n= Illuminate\\Database\\Eloquent\\Collection {#15683\n all: [\n Jiminny\\Models\\AutomatedReportResult {#15703\n id: 14,\n uuid: b\"C^Ð>!€]¢ª1vàý\\x1F6Ï\",\n report_id: 8,\n name: \"Exec Summary - 5 Sep 2024 - 10 Mar 2026 - All\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"team_id\":1,\"request_id\":\"21805da2-d03e-435e-aa31-76e0fd1f36cf\",\"report_type\":\"exec_summary\",\"media_types\":[\"pdf\",\"podcast\"],\"from_date\":\"2024-09-05T00:00:00+00:00\",\"to_date\":\"2026-03-10T23:59:59+00:00\",\"group_ids\":[],\"call_deal_stage\":[],\"current_deal_stage\":[],\"deal_min_value\":null,\"deal_max_value\":null,\"call_types\":[\"conference\",\"dialer\"],\"call_duration_min_seconds\":null,\"call_duration_max_seconds\":null,\"special_requirements\":\"\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"5 Sep 2024 - 10 Mar 2026\",\"playbook_categories\":[],\"custom_name\":null}\",\n response: \"{\"request_id\":\"21805da2-d03e-435e-aa31-76e0fd1f36cf\",\"status\":\"completed\",\"timestamp\":\"2026-03-26T14:10:58.983895+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf.MD\",\"report_type\":\"exec_summary\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf.pdf\",\"podcast_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.txt\",\"podcast_audio_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.mp3\",\"podcast_ssml_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.ssml\"}\",\n requested_at: \"2026-03-26 14:06:35\",\n generated_at: \"2026-03-26 14:10:59\",\n sent_at: null,\n created_at: \"2026-03-26 14:06:35\",\n updated_at: \"2026-03-26 14:10:59\",\n report: Jiminny\\Models\\AutomatedReport {#15197\n id: 8,\n #uuid: b\"FWNçôý\\x1Dªš–+âga”d\",\n team_id: 1,\n type: \"exec_summary\",\n status: 1,\n frequency: \"one_off\",\n from: \"2024-09-05 00:00:00\",\n to: \"2026-03-10 00:00:00\",\n deal_value_min: null,\n deal_value_max: null,\n call_types: \"[\"conference\",\"dialer\"]\",\n media_types: \"[\"pdf\",\"podcast\"]\",\n call_duration_min: null,\n call_duration_max: null,\n groups: \"[]\",\n playbook_categories: \"[]\",\n deal_at_call_stages: \"[]\",\n current_deal_stages: \"[]\",\n recipients: \"{\"users\":[]}\",\n jiminny_recipients: \"{\"users\":[]}\",\n additional_prompt_input: \"\",\n custom_name: null,\n activity_search_id: null,\n ask_anything_prompt_id: null,\n expires_at: null,\n created_by: 3248,\n created_at: \"2026-03-26 14:06:32\",\n updated_at: \"2026-03-26 14:06:32\",\n deleted_at: null,\n },\n },\n Jiminny\\Models\\AutomatedReportResult {#15701\n id: 43,\n uuid: b\"GJ—\\x14?§ÄÉøN_0A}Ý\",\n report_id: 33,\n name: \"Ask Jiminny test report - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"test\",\"call_ids\":[\"54964443\",\"54964442\",\"54214348\",\"54747783\",\"54792639\",\"54355211\",\"54214356\",\"54214362\",\"54373257\",\"54276602\",\"54547166\",\"54357434\",\"54638437\",\"54439335\",\"54184628\",\"54435911\",\"54547029\",\"54580912\",\"54314274\",\"53918272\",\"54447612\",\"54561308\",\"52175046\",\"54531535\",\"54495620\",\"52753147\",\"52175055\",\"54358692\",\"54020412\",\"54424068\",\"54222599\",\"53852885\",\"52697526\",\"53944212\",\"54222051\",\"54125650\",\"54284918\",\"54137014\",\"54142985\",\"53755346\",\"54078231\",\"52175067\",\"54021634\",\"53971125\",\"54077453\",\"54010996\",\"52759195\",\"53028445\",\"54065927\",\"52175082\",\"53920744\",\"54020314\",\"52714861\",\"53765213\",\"53926207\",\"52175042\",\"52948707\",\"53602066\",\"53824355\",\"53769276\",\"53048081\",\"52263045\",\"52564798\",\"53604424\",\"53575428\",\"52167221\",\"53545307\",\"53545088\",\"53606423\",\"52956249\",\"52894249\",\"52568574\",\"52527230\",\"53058889\",\"52760234\",\"52263048\",\"52451159\",\"52175073\",\"52358247\",\"52189687\",\"52232025\",\"51980465\",\"52430474\",\"52363300\",\"52346694\",\"52359342\",\"52231503\",\"52255239\",\"50934254\",\"52303651\",\"52258169\",\"51958927\",\"52242714\",\"52239097\",\"52083853\",\"52083904\",\"51765719\",\"52072580\",\"51525359\",\"51806803\"],\"team_id\":1,\"request_id\":\"3fa7c4c9-9714-474a-adf8-4e5f30417ddd\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Ask Jiminny test report\"}\",\n response: \"{\"request_id\":\"3fa7c4c9-9714-474a-adf8-4e5f30417ddd\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T07:49:35.099004+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/3fa7c4c9-9714-474a-adf8-4e5f30417ddd.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/3fa7c4c9-9714-474a-adf8-4e5f30417ddd.pdf\"}\",\n requested_at: \"2026-04-14 07:49:04\",\n generated_at: \"2026-04-14 07:49:35\",\n sent_at: null,\n created_at: \"2026-04-14 07:49:03\",\n updated_at: \"2026-04-14 07:49:35\",\n report: Jiminny\\Models\\AutomatedReport {#15196\n id: 33,\n #uuid: b\"I«SŽút\\x17ªˆ'w#V7¦ù\",\n team_id: 1,\n type: \"ask_jiminny\",\n status: 1,\n frequency: \"daily\",\n from: null,\n to: null,\n deal_value_min: null,\n deal_value_max: null,\n call_types: \"[]\",\n media_types: \"[\"pdf\"]\",\n call_duration_min: null,\n call_duration_max: null,\n groups: \"[9]\",\n playbook_categories: null,\n deal_at_call_stages: null,\n current_deal_stages: null,\n recipients: \"{\"users\":[7160,23309]}\",\n jiminny_recipients: null,\n additional_prompt_input: null,\n custom_name: \"Ask Jiminny test report\",\n activity_search_id: 26912,\n ask_anything_prompt_id: 62,\n expires_at: \"2026-04-30\",\n created_by: 7160,\n created_at: \"2026-04-08 10:12:30\",\n updated_at: \"2026-04-08 10:12:30\",\n deleted_at: null,\n },\n },\n Jiminny\\Models\\AutomatedReportResult {#15700\n id: 45,\n uuid: b\"A¢•M8z~‚*l\\x01÷ð\\0s\",\n report_id: 33,\n name: \"Ask Jiminny test report - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"test\",\"call_ids\":[\"54964443\",\"54964442\",\"54214348\",\"54747783\",\"54792639\",\"54355211\",\"54214356\",\"54214362\",\"54373257\",\"54276602\",\"54547166\",\"54357434\",\"54638437\",\"54439335\",\"54184628\",\"54435911\",\"54547029\",\"54580912\",\"54314274\",\"53918272\",\"54447612\",\"54561308\",\"52175046\",\"54531535\",\"54495620\",\"52753147\",\"52175055\",\"54358692\",\"54020412\",\"54424068\",\"54222599\",\"53852885\",\"52697526\",\"53944212\",\"54222051\",\"54125650\",\"54284918\",\"54137014\",\"54142985\",\"53755346\",\"54078231\",\"52175067\",\"54021634\",\"53971125\",\"54077453\",\"54010996\",\"52759195\",\"53028445\",\"54065927\",\"52175082\",\"53920744\",\"54020314\",\"52714861\",\"53765213\",\"53926207\",\"52175042\",\"52948707\",\"53602066\",\"53824355\",\"53769276\",\"53048081\",\"52263045\",\"52564798\",\"53604424\",\"53575428\",\"52167221\",\"53545307\",\"53545088\",\"53606423\",\"52956249\",\"52894249\",\"52568574\",\"52527230\",\"53058889\",\"52760234\",\"52263048\",\"52451159\",\"52175073\",\"52358247\",\"52189687\",\"52232025\",\"51980465\",\"52430474\",\"52363300\",\"52346694\",\"52359342\",\"52231503\",\"52255239\",\"50934254\",\"52303651\",\"52258169\",\"51958927\",\"52242714\",\"52239097\",\"52083853\",\"52083904\",\"51765719\",\"52072580\",\"51525359\",\"51806803\"],\"team_id\":1,\"request_id\":\"38817a7e-954d-41a2-822a-6c01f7f00073\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Ask Jiminny test report\"}\",\n response: \"{\"request_id\":\"38817a7e-954d-41a2-822a-6c01f7f00073\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T08:41:46.594895+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/38817a7e-954d-41a2-822a-6c01f7f00073.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/38817a7e-954d-41a2-822a-6c01f7f00073.pdf\"}\",\n requested_at: \"2026-04-14 08:41:11\",\n generated_at: \"2026-04-14 08:41:46\",\n sent_at: null,\n created_at: \"2026-04-14 08:41:11\",\n updated_at: \"2026-04-14 08:41:46\",\n report: Jiminny\\Models\\AutomatedReport {#15196},\n },\n Jiminny\\Models\\AutomatedReportResult {#15705\n id: 47,\n uuid: b\"D‘\\x10[̘^–𔹧-ÞÝB\",\n report_id: 33,\n name: \"Ask Jiminny test report - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"test\",\"call_ids\":[\"54964443\",\"54964442\",\"54214348\",\"54747783\",\"54792639\",\"54355211\",\"54214356\",\"54214362\",\"54373257\",\"54276602\",\"54547166\",\"54357434\",\"54638437\",\"54439335\",\"54184628\",\"54435911\",\"54547029\",\"54580912\",\"54314274\",\"53918272\",\"54447612\",\"54561308\",\"52175046\",\"54531535\",\"54495620\",\"52753147\",\"52175055\",\"54358692\",\"54020412\",\"54424068\",\"54222599\",\"53852885\",\"52697526\",\"53944212\",\"54222051\",\"54125650\",\"54284918\",\"54137014\",\"54142985\",\"53755346\",\"54078231\",\"52175067\",\"54021634\",\"53971125\",\"54077453\",\"54010996\",\"52759195\",\"53028445\",\"54065927\",\"52175082\",\"53920744\",\"54020314\",\"52714861\",\"53765213\",\"53926207\",\"52175042\",\"52948707\",\"53602066\",\"53824355\",\"53769276\",\"53048081\",\"52263045\",\"52564798\",\"53604424\",\"53575428\",\"52167221\",\"53545307\",\"53545088\",\"53606423\",\"52956249\",\"52894249\",\"52568574\",\"52527230\",\"53058889\",\"52760234\",\"52263048\",\"52451159\",\"52175073\",\"52358247\",\"52189687\",\"52232025\",\"51980465\",\"52430474\",\"52363300\",\"52346694\",\"52359342\",\"52231503\",\"52255239\",\"50934254\",\"52303651\",\"52258169\",\"51958927\",\"52242714\",\"52239097\",\"52083853\",\"52083904\",\"51765719\",\"52072580\",\"51525359\",\"51806803\"],\"team_id\":1,\"request_id\":\"cc985e96-105b-4491-9a94-b9a72ddedd42\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Ask Jiminny test report\"}\",\n response: \"{\"request_id\":\"cc985e96-105b-4491-9a94-b9a72ddedd42\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T10:46:38.602513+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/cc985e96-105b-4491-9a94-b9a72ddedd42.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/cc985e96-105b-4491-9a94-b9a72ddedd42.pdf\"}\",\n requested_at: \"2026-04-14 10:46:09\",\n generated_at: \"2026-04-14 10:46:38\",\n sent_at: null,\n created_at: \"2026-04-14 10:46:08\",\n updated_at: \"2026-04-14 10:46:38\",\n report: Jiminny\\Models\\AutomatedReport {#15196},\n },\n Jiminny\\Models\\AutomatedReportResult {#15687\n id: 49,\n uuid: b\"K·Ì¬Ò\\vþþ«PÈ»‰\\x19™s\",\n report_id: 35,\n name: \"Test 6 - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"Please make a summary for all calls\",\"call_ids\":[\"49880280\",\"49104686\",\"48360159\",\"47193308\",\"44762288\",\"43862984\",\"41678335\",\"41310991\",\"39940631\",\"39779620\",\"39389894\",\"39106205\",\"38745110\",\"38510502\"],\"team_id\":1,\"request_id\":\"d20bfefe-ccac-4bb7-ab50-c8bb89199973\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Test 6\"}\",\n response: \"{\"request_id\":\"d20bfefe-ccac-4bb7-ab50-c8bb89199973\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T10:46:37.905336+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/d20bfefe-ccac-4bb7-ab50-c8bb89199973.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/d20bfefe-ccac-4bb7-ab50-c8bb89199973.pdf\"}\",\n requested_at: \"2026-04-14 10:46:16\",\n generated_at: \"2026-04-14 10:46:37\",\n sent_at: null,\n created_at: \"2026-04-14 10:46:16\",\n updated_at: \"2026-04-14 10:46:38\",\n report: Jiminny\\Models\\AutomatedReport {#15219\n id: 35,\n #uuid: b\"\"\"\n @@Àê~xFâˆô\\n\n áKfè\n \"\"\",\n team_id: 1,\n type: \"ask_jiminny\",\n status: 1,\n frequency: \"daily\",\n from: null,\n to: null,\n deal_value_min: null,\n deal_value_max: null,\n call_types: \"[]\",\n media_types: \"[\"pdf\"]\",\n call_duration_min: null,\n call_duration_max: null,\n groups: \"[9]\",\n playbook_categories: null,\n deal_at_call_stages: null,\n current_deal_stages: null,\n recipients: \"{\"users\":[3248,23559]}\",\n jiminny_recipients: null,\n additional_prompt_input: null,\n custom_name: \"Test 6\",\n activity_search_id: 10932,\n ask_anything_prompt_id: 65,\n expires_at: \"2026-04-19\",\n created_by: 3248,\n created_at: \"2026-04-14 08:39:14\",\n updated_at: \"2026-04-14 08:39:14\",\n deleted_at: null,\n },\n },\n Jiminny\\Models\\AutomatedReportResult {#15686\n id: 50,\n uuid: b\"GÙµ‚\\{3‡p©ú1ÿÖŽ\",\n report_id: 35,\n name: \"Test 6 - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"Please make a summary for all calls\",\"call_ids\":[\"49880280\",\"49104686\",\"48360159\",\"47193308\",\"44762288\",\"43862984\",\"41678335\",\"41310991\",\"39940631\",\"39779620\",\"39389894\",\"39106205\",\"38745110\",\"38510502\"],\"team_id\":1,\"request_id\":\"5c9d7b33-b582-47d9-8770-a9fa31ffd68d\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Test 6\"}\",\n response: \"{\"request_id\":\"5c9d7b33-b582-47d9-8770-a9fa31ffd68d\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T10:49:01.677577+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/5c9d7b33-b582-47d9-8770-a9fa31ffd68d.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/5c9d7b33-b582-47d9-8770-a9fa31ffd68d.pdf\"}\",\n requested_at: \"2026-04-14 10:48:43\",\n generated_at: \"2026-04-14 10:49:01\",\n sent_at: null,\n created_at: \"2026-04-14 10:48:42\",\n updated_at: \"2026-04-14 10:49:01\",\n report: Jiminny\\Models\\AutomatedReport {#15219},\n },\n Jiminny\\Models\\AutomatedReportResult {#15685\n id: 51,\n uuid: b\"L\\x13HSÏÖ»™ŸŽ¦¯Cár{\",\n report_id: 36,\n name: \"Tuesday report - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"test\",\"call_ids\":[\"54214348\",\"54747783\",\"54792639\",\"54355211\",\"54214356\",\"54579532\",\"54214362\",\"54795501\",\"54373257\",\"54566775\",\"54179068\",\"54691680\",\"54702966\",\"54186485\",\"54547166\",\"54357434\",\"54439335\",\"54435911\",\"54547029\",\"54179299\",\"54580912\",\"54314274\",\"53918272\",\"54310744\",\"54447612\",\"54561308\",\"52175046\",\"54531535\",\"54495620\",\"52753147\",\"53853301\",\"52551697\",\"52175055\",\"54358692\",\"54020412\",\"54424068\",\"54222599\",\"53853298\",\"53852885\",\"53931221\",\"54132327\",\"53944212\",\"54037186\",\"54125650\",\"54059512\",\"53801108\",\"54284918\",\"52552430\",\"54142985\",\"53755346\",\"52175067\",\"54021634\",\"52896288\",\"52175051\",\"54077453\",\"52413114\",\"54010996\",\"53528248\",\"54078291\",\"53813598\",\"54076266\",\"53028445\",\"54065927\",\"53922780\",\"53729434\",\"53919824\",\"53384442\",\"52175082\",\"53920744\",\"54020314\",\"52714861\",\"54009217\",\"53765213\",\"53926207\",\"52175042\",\"52948707\",\"53602066\",\"53824355\",\"53769276\",\"53048081\",\"53769369\",\"53384450\",\"52161199\",\"52263045\",\"52564798\",\"50907426\",\"53604424\",\"53575428\",\"52167221\",\"52156369\",\"53545307\",\"52565625\",\"53610225\",\"53594648\",\"53545088\",\"52175041\",\"52956249\",\"52217425\",\"52562272\",\"52248293\"],\"team_id\":1,\"request_id\":\"cfd6bb99-4853-4c13-9f8e-a6af43e1727b\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Tuesday report\"}\",\n response: \"{\"request_id\":\"cfd6bb99-4853-4c13-9f8e-a6af43e1727b\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T11:23:03.951289+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/cfd6bb99-4853-4c13-9f8e-a6af43e1727b.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/cfd6bb99-4853-4c13-9f8e-a6af43e1727b.pdf\"}\",\n requested_at: \"2026-04-14 11:22:36\",\n generated_at: \"2026-04-14 11:23:04\",\n sent_at: null,\n created_at: \"2026-04-14 11:22:36\",\n updated_at: \"2026-04-14 11:23:04\",\n report: Jiminny\\Models\\AutomatedReport {#15221\n id: 36,\n #uuid: b\"Aß#ôq¸»õ¶7i7eçªx\",\n team_id: 1,\n type: \"ask_jiminny\",\n status: 1,\n frequency: \"daily\",\n from: null,\n to: null,\n deal_value_min: null,\n deal_value_max: null,\n call_types: \"[]\",\n media_types: \"[\"pdf\"]\",\n call_duration_min: null,\n call_duration_max: null,\n groups: \"[]\",\n playbook_categories: null,\n deal_at_call_stages: null,\n current_deal_stages: null,\n recipients: \"{\"users\":[7160]}\",\n jiminny_recipients: null,\n additional_prompt_input: null,\n custom_name: \"Tuesday report\",\n activity_search_id: 26913,\n ask_anything_prompt_id: 62,\n expires_at: \"2026-04-30\",\n created_by: 7160,\n created_at: \"2026-04-14 11:20:20\",\n updated_at: \"2026-04-14 11:20:20\",\n deleted_at: null,\n },\n },\n ],\n }\n\n> $repo->getGeneratedNotSentResults()->count();\n= 7\n\n> exit\n\n INFO Goodbye.\n\nroot@b79a4bdd6905:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@d1ac6fe11762:/home/jiminny#","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (docker)","depth":2,"bounds":{"left":0.12291667,"top":0.05888889,"width":0.12291667,"height":0.026666667},"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.12708333,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.24583334,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.25,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-93-249:~ (nc)","depth":2,"bounds":{"left":0.36875,"top":0.05888889,"width":0.12291667,"height":0.026666667},"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.37291667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.49166667,"top":0.05888889,"width":0.12291667,"height":0.026666667},"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.49583334,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6145833,"top":0.05888889,"width":0.12291667,"height":0.026666667},"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.61875,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7375,"top":0.05888889,"width":0.12291667,"height":0.026666667},"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.7416667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Unable to access screenpipe activity data (claude)","depth":2,"bounds":{"left":0.86041665,"top":0.05888889,"width":0.12291667,"height":0.026666667},"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.8645833,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ec2-user@ip-10-30-93-249:~","depth":1,"bounds":{"left":0.4298611,"top":0.033333335,"width":0.13958333,"height":0.017777778},"role_description":"text"}]...
|
8800811553733242264
|
-5261720347317964283
|
click
|
accessibility
|
NULL
|
Last login: Sat Apr 11 12:38:35 on ttys007
Poetry Last login: Sat Apr 11 12:38:35 on ttys007
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ vstg
Warning: Permanently added 'jiminny-stage-ecs1' (ED25519) to the list of known hosts.
A newer 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 info
, #_
~\_ ####_
~~ \_#####\
~~ \###|
~~ \#/ ___ Amazon Linux 2023 (ECS Optimized)
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
For documentation, visit [URL_WITH_CREDENTIALS] php artisan automated-reports
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Started {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Found 2 daily reports to process {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"fa7417aa-538e-49ab-8827-77235637a6f9","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"63e6d70b-b7cb-4dfa-8443-53453e6c4054","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Completed {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
root@fee51d2e1f17:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@73b64f5d54a3:/home/jiminny# php artisan automated-reports
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Started {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Found 3 daily reports to process {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"fa7417aa-538e-49ab-8827-77235637a6f9","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"63e6d70b-b7cb-4dfa-8443-53453e6c4054","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:04] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"7e7846e2-c0ea-4040-88f4-0ae14b66ade8","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:04] staging.INFO: [automated-reports] Completed {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
root@73b64f5d54a3:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@c78a087b1345:/home/jiminny# php artisan automated-reports
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Started {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Found 3 daily reports to process {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"fa7417aa-538e-49ab-8827-77235637a6f9","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"63e6d70b-b7cb-4dfa-8443-53453e6c4054","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"7e7846e2-c0ea-4040-88f4-0ae14b66ade8","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Completed {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
root@c78a087b1345:/home/jiminny# php artisan automated-reports --report-id 35
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Started {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[automated-reports] Automated report found Test 6
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Found 1 daily reports to process {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"7e7846e2-c0ea-4040-88f4-0ae14b66ade8","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Completed {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
root@c78a087b1345:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@b79a4bdd6905:/home/jiminny# php artisan automated-reports --report-id 71b8bbf5-23f4-41df-b637-693765e7aa78
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Started {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[automated-reports] Automated report found Tuesday report
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Found 1 daily reports to process {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"71b8bbf5-23f4-41df-b637-693765e7aa78","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Completed {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
root@b79a4bdd6905:/home/jiminny# php artisan automated-reports:send
root@b79a4bdd6905:/home/jiminny# php artisan tinker
Psy Shell v0.12.21 (PHP 8.3.30 — cli) by Justin Hileman
New PHP manual is available (latest: 3.0.5). Update with `doc --update-manual`
> $repo = app(AutomatedReportsRepository::class);
[!] Aliasing 'AutomatedReportsRepository' to 'Jiminny\Repositories\AutomatedReportsRepository' for this Tinker session.
= Jiminny\Repositories\AutomatedReportsRepository {#15215}
> $repo->getGeneratedNotSentResults();
= Illuminate\Database\Eloquent\Collection {#15683
all: [
Jiminny\Models\AutomatedReportResult {#15703
id: 14,
uuid: b"C^Ð>!€]¢ª1vàý\x1F6Ï",
report_id: 8,
name: "Exec Summary - 5 Sep 2024 - 10 Mar 2026 - All",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"team_id":1,"request_id":"21805da2-d03e-435e-aa31-76e0fd1f36cf","report_type":"exec_summary","media_types":["pdf","podcast"],"from_date":"2024-09-05T00:00:00+00:00","to_date":"2026-03-10T23:59:59+00:00","group_ids":[],"call_deal_stage":[],"current_deal_stage":[],"deal_min_value":null,"deal_max_value":null,"call_types":["conference","dialer"],"call_duration_min_seconds":null,"call_duration_max_seconds":null,"special_requirements":"","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"5 Sep 2024 - 10 Mar 2026","playbook_categories":[],"custom_name":null}",
response: "{"request_id":"21805da2-d03e-435e-aa31-76e0fd1f36cf","status":"completed","timestamp":"2026-03-26T14:10:58.983895+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf.MD","report_type":"exec_summary","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf.pdf","podcast_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.txt","podcast_audio_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.mp3","podcast_ssml_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.ssml"}",
requested_at: "2026-03-26 14:06:35",
generated_at: "2026-03-26 14:10:59",
sent_at: null,
created_at: "2026-03-26 14:06:35",
updated_at: "2026-03-26 14:10:59",
report: Jiminny\Models\AutomatedReport {#15197
id: 8,
#uuid: b"FWNçôý\x1Dªš–+âga”d",
team_id: 1,
type: "exec_summary",
status: 1,
frequency: "one_off",
from: "2024-09-05 00:00:00",
to: "2026-03-10 00:00:00",
deal_value_min: null,
deal_value_max: null,
call_types: "["conference","dialer"]",
media_types: "["pdf","podcast"]",
call_duration_min: null,
call_duration_max: null,
groups: "[]",
playbook_categories: "[]",
deal_at_call_stages: "[]",
current_deal_stages: "[]",
recipients: "{"users":[]}",
jiminny_recipients: "{"users":[]}",
additional_prompt_input: "",
custom_name: null,
activity_search_id: null,
ask_anything_prompt_id: null,
expires_at: null,
created_by: 3248,
created_at: "2026-03-26 14:06:32",
updated_at: "2026-03-26 14:06:32",
deleted_at: null,
},
},
Jiminny\Models\AutomatedReportResult {#15701
id: 43,
uuid: b"GJ—\x14?§ÄÉøN_0A}Ý",
report_id: 33,
name: "Ask Jiminny test report - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"test","call_ids":["54964443","54964442","54214348","54747783","54792639","54355211","54214356","54214362","54373257","54276602","54547166","54357434","54638437","54439335","54184628","54435911","54547029","54580912","54314274","53918272","54447612","54561308","52175046","54531535","54495620","52753147","52175055","54358692","54020412","54424068","54222599","53852885","52697526","53944212","54222051","54125650","54284918","54137014","54142985","53755346","54078231","52175067","54021634","53971125","54077453","54010996","52759195","53028445","54065927","52175082","53920744","54020314","52714861","53765213","53926207","52175042","52948707","53602066","53824355","53769276","53048081","52263045","52564798","53604424","53575428","52167221","53545307","53545088","53606423","52956249","52894249","52568574","52527230","53058889","52760234","52263048","52451159","52175073","52358247","52189687","52232025","51980465","52430474","52363300","52346694","52359342","52231503","52255239","50934254","52303651","52258169","51958927","52242714","52239097","52083853","52083904","51765719","52072580","51525359","51806803"],"team_id":1,"request_id":"3fa7c4c9-9714-474a-adf8-4e5f30417ddd","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Ask Jiminny test report"}",
response: "{"request_id":"3fa7c4c9-9714-474a-adf8-4e5f30417ddd","status":"completed","timestamp":"2026-04-14T07:49:35.099004+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/3fa7c4c9-9714-474a-adf8-4e5f30417ddd.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/3fa7c4c9-9714-474a-adf8-4e5f30417ddd.pdf"}",
requested_at: "2026-04-14 07:49:04",
generated_at: "2026-04-14 07:49:35",
sent_at: null,
created_at: "2026-04-14 07:49:03",
updated_at: "2026-04-14 07:49:35",
report: Jiminny\Models\AutomatedReport {#15196
id: 33,
#uuid: b"I«SŽút\x17ªˆ'w#V7¦ù",
team_id: 1,
type: "ask_jiminny",
status: 1,
frequency: "daily",
from: null,
to: null,
deal_value_min: null,
deal_value_max: null,
call_types: "[]",
media_types: "["pdf"]",
call_duration_min: null,
call_duration_max: null,
groups: "[9]",
playbook_categories: null,
deal_at_call_stages: null,
current_deal_stages: null,
recipients: "{"users":[7160,23309]}",
jiminny_recipients: null,
additional_prompt_input: null,
custom_name: "Ask Jiminny test report",
activity_search_id: 26912,
ask_anything_prompt_id: 62,
expires_at: "2026-04-30",
created_by: 7160,
created_at: "2026-04-08 10:12:30",
updated_at: "2026-04-08 10:12:30",
deleted_at: null,
},
},
Jiminny\Models\AutomatedReportResult {#15700
id: 45,
uuid: b"A¢•M8z~‚*l\x01÷ð\0s",
report_id: 33,
name: "Ask Jiminny test report - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"test","call_ids":["54964443","54964442","54214348","54747783","54792639","54355211","54214356","54214362","54373257","54276602","54547166","54357434","54638437","54439335","54184628","54435911","54547029","54580912","54314274","53918272","54447612","54561308","52175046","54531535","54495620","52753147","52175055","54358692","54020412","54424068","54222599","53852885","52697526","53944212","54222051","54125650","54284918","54137014","54142985","53755346","54078231","52175067","54021634","53971125","54077453","54010996","52759195","53028445","54065927","52175082","53920744","54020314","52714861","53765213","53926207","52175042","52948707","53602066","53824355","53769276","53048081","52263045","52564798","53604424","53575428","52167221","53545307","53545088","53606423","52956249","52894249","52568574","52527230","53058889","52760234","52263048","52451159","52175073","52358247","52189687","52232025","51980465","52430474","52363300","52346694","52359342","52231503","52255239","50934254","52303651","52258169","51958927","52242714","52239097","52083853","52083904","51765719","52072580","51525359","51806803"],"team_id":1,"request_id":"38817a7e-954d-41a2-822a-6c01f7f00073","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Ask Jiminny test report"}",
response: "{"request_id":"38817a7e-954d-41a2-822a-6c01f7f00073","status":"completed","timestamp":"2026-04-14T08:41:46.594895+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/38817a7e-954d-41a2-822a-6c01f7f00073.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/38817a7e-954d-41a2-822a-6c01f7f00073.pdf"}",
requested_at: "2026-04-14 08:41:11",
generated_at: "2026-04-14 08:41:46",
sent_at: null,
created_at: "2026-04-14 08:41:11",
updated_at: "2026-04-14 08:41:46",
report: Jiminny\Models\AutomatedReport {#15196},
},
Jiminny\Models\AutomatedReportResult {#15705
id: 47,
uuid: b"D‘\x10[̘^–𔹧-ÞÝB",
report_id: 33,
name: "Ask Jiminny test report - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"test","call_ids":["54964443","54964442","54214348","54747783","54792639","54355211","54214356","54214362","54373257","54276602","54547166","54357434","54638437","54439335","54184628","54435911","54547029","54580912","54314274","53918272","54447612","54561308","52175046","54531535","54495620","52753147","52175055","54358692","54020412","54424068","54222599","53852885","52697526","53944212","54222051","54125650","54284918","54137014","54142985","53755346","54078231","52175067","54021634","53971125","54077453","54010996","52759195","53028445","54065927","52175082","53920744","54020314","52714861","53765213","53926207","52175042","52948707","53602066","53824355","53769276","53048081","52263045","52564798","53604424","53575428","52167221","53545307","53545088","53606423","52956249","52894249","52568574","52527230","53058889","52760234","52263048","52451159","52175073","52358247","52189687","52232025","51980465","52430474","52363300","52346694","52359342","52231503","52255239","50934254","52303651","52258169","51958927","52242714","52239097","52083853","52083904","51765719","52072580","51525359","51806803"],"team_id":1,"request_id":"cc985e96-105b-4491-9a94-b9a72ddedd42","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Ask Jiminny test report"}",
response: "{"request_id":"cc985e96-105b-4491-9a94-b9a72ddedd42","status":"completed","timestamp":"2026-04-14T10:46:38.602513+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/cc985e96-105b-4491-9a94-b9a72ddedd42.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/cc985e96-105b-4491-9a94-b9a72ddedd42.pdf"}",
requested_at: "2026-04-14 10:46:09",
generated_at: "2026-04-14 10:46:38",
sent_at: null,
created_at: "2026-04-14 10:46:08",
updated_at: "2026-04-14 10:46:38",
report: Jiminny\Models\AutomatedReport {#15196},
},
Jiminny\Models\AutomatedReportResult {#15687
id: 49,
uuid: b"K·Ì¬Ò\vþþ«PÈ»‰\x19™s",
report_id: 35,
name: "Test 6 - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"Please make a summary for all calls","call_ids":["49880280","49104686","48360159","47193308","44762288","43862984","41678335","41310991","39940631","39779620","39389894","39106205","38745110","38510502"],"team_id":1,"request_id":"d20bfefe-ccac-4bb7-ab50-c8bb89199973","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Test 6"}",
response: "{"request_id":"d20bfefe-ccac-4bb7-ab50-c8bb89199973","status":"completed","timestamp":"2026-04-14T10:46:37.905336+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/d20bfefe-ccac-4bb7-ab50-c8bb89199973.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/d20bfefe-ccac-4bb7-ab50-c8bb89199973.pdf"}",
requested_at: "2026-04-14 10:46:16",
generated_at: "2026-04-14 10:46:37",
sent_at: null,
created_at: "2026-04-14 10:46:16",
updated_at: "2026-04-14 10:46:38",
report: Jiminny\Models\AutomatedReport {#15219
id: 35,
#uuid: b"""
@@Àê~xFâˆô\n
áKfè
""",
team_id: 1,
type: "ask_jiminny",
status: 1,
frequency: "daily",
from: null,
to: null,
deal_value_min: null,
deal_value_max: null,
call_types: "[]",
media_types: "["pdf"]",
call_duration_min: null,
call_duration_max: null,
groups: "[9]",
playbook_categories: null,
deal_at_call_stages: null,
current_deal_stages: null,
recipients: "{"users":[3248,23559]}",
jiminny_recipients: null,
additional_prompt_input: null,
custom_name: "Test 6",
activity_search_id: 10932,
ask_anything_prompt_id: 65,
expires_at: "2026-04-19",
created_by: 3248,
created_at: "2026-04-14 08:39:14",
updated_at: "2026-04-14 08:39:14",
deleted_at: null,
},
},
Jiminny\Models\AutomatedReportResult {#15686
id: 50,
uuid: b"GÙµ‚\{3‡p©ú1ÿÖŽ",
report_id: 35,
name: "Test 6 - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"Please make a summary for all calls","call_ids":["49880280","49104686","48360159","47193308","44762288","43862984","41678335","41310991","39940631","39779620","39389894","39106205","38745110","38510502"],"team_id":1,"request_id":"5c9d7b33-b582-47d9-8770-a9fa31ffd68d","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Test 6"}",
response: "{"request_id":"5c9d7b33-b582-47d9-8770-a9fa31ffd68d","status":"completed","timestamp":"2026-04-14T10:49:01.677577+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/5c9d7b33-b582-47d9-8770-a9fa31ffd68d.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/5c9d7b33-b582-47d9-8770-a9fa31ffd68d.pdf"}",
requested_at: "2026-04-14 10:48:43",
generated_at: "2026-04-14 10:49:01",
sent_at: null,
created_at: "2026-04-14 10:48:42",
updated_at: "2026-04-14 10:49:01",
report: Jiminny\Models\AutomatedReport {#15219},
},
Jiminny\Models\AutomatedReportResult {#15685
id: 51,
uuid: b"L\x13HSÏÖ»™ŸŽ¦¯Cár{",
report_id: 36,
name: "Tuesday report - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"test","call_ids":["54214348","54747783","54792639","54355211","54214356","54579532","54214362","54795501","54373257","54566775","54179068","54691680","54702966","54186485","54547166","54357434","54439335","54435911","54547029","54179299","54580912","54314274","53918272","54310744","54447612","54561308","52175046","54531535","54495620","52753147","53853301","52551697","52175055","54358692","54020412","54424068","54222599","53853298","53852885","53931221","54132327","53944212","54037186","54125650","54059512","53801108","54284918","52552430","54142985","53755346","52175067","54021634","52896288","52175051","54077453","52413114","54010996","53528248","54078291","53813598","54076266","53028445","54065927","53922780","53729434","53919824","53384442","52175082","53920744","54020314","52714861","54009217","53765213","53926207","52175042","52948707","53602066","53824355","53769276","53048081","53769369","53384450","52161199","52263045","52564798","50907426","53604424","53575428","52167221","52156369","53545307","52565625","53610225","53594648","53545088","52175041","52956249","52217425","52562272","52248293"],"team_id":1,"request_id":"cfd6bb99-4853-4c13-9f8e-a6af43e1727b","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Tuesday report"}",
response: "{"request_id":"cfd6bb99-4853-4c13-9f8e-a6af43e1727b","status":"completed","timestamp":"2026-04-14T11:23:03.951289+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/cfd6bb99-4853-4c13-9f8e-a6af43e1727b.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/cfd6bb99-4853-4c13-9f8e-a6af43e1727b.pdf"}",
requested_at: "2026-04-14 11:22:36",
generated_at: "2026-04-14 11:23:04",
sent_at: null,
created_at: "2026-04-14 11:22:36",
updated_at: "2026-04-14 11:23:04",
report: Jiminny\Models\AutomatedReport {#15221
id: 36,
#uuid: b"Aß#ôq¸»õ¶7i7eçªx",
team_id: 1,
type: "ask_jiminny",
status: 1,
frequency: "daily",
from: null,
to: null,
deal_value_min: null,
deal_value_max: null,
call_types: "[]",
media_types: "["pdf"]",
call_duration_min: null,
call_duration_max: null,
groups: "[]",
playbook_categories: null,
deal_at_call_stages: null,
current_deal_stages: null,
recipients: "{"users":[7160]}",
jiminny_recipients: null,
additional_prompt_input: null,
custom_name: "Tuesday report",
activity_search_id: 26913,
ask_anything_prompt_id: 62,
expires_at: "2026-04-30",
created_by: 7160,
created_at: "2026-04-14 11:20:20",
updated_at: "2026-04-14 11:20:20",
deleted_at: null,
},
},
],
}
> $repo->getGeneratedNotSentResults()->count();
= 7
> exit
INFO Goodbye.
root@b79a4bdd6905:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@d1ac6fe11762:/home/jiminny#
DOCKER
Close Tab
DEV (docker)
Close Tab
APP (-zsh)
Close Tab
ec2-user@ip-10-30-93-249:~ (nc)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
✳ Unable to access screenpipe activity data (claude)
Close Tab
⌥⌘1
ec2-user@ip-10-30-93-249:~...
|
NULL
|
|
13451
|
293
|
26
|
2026-04-14T12:24:40.179110+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776169480179_m2.jpg...
|
iTerm2
|
ec2-user@ip-10-30-93-249:~
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Sat Apr 11 12:38:35 on ttys007
Poetry Last login: Sat Apr 11 12:38:35 on ttys007
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ vstg
Warning: Permanently added 'jiminny-stage-ecs1' (ED25519) to the list of known hosts.
A newer 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 info
, #_
~\_ ####_
~~ \_#####\
~~ \###|
~~ \#/ ___ Amazon Linux 2023 (ECS Optimized)
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
For documentation, visit [URL_WITH_CREDENTIALS] php artisan automated-reports
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Started {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Found 2 daily reports to process {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"fa7417aa-538e-49ab-8827-77235637a6f9","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"63e6d70b-b7cb-4dfa-8443-53453e6c4054","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Completed {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
root@fee51d2e1f17:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@73b64f5d54a3:/home/jiminny# php artisan automated-reports
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Started {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Found 3 daily reports to process {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"fa7417aa-538e-49ab-8827-77235637a6f9","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"63e6d70b-b7cb-4dfa-8443-53453e6c4054","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:04] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"7e7846e2-c0ea-4040-88f4-0ae14b66ade8","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:04] staging.INFO: [automated-reports] Completed {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
root@73b64f5d54a3:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@c78a087b1345:/home/jiminny# php artisan automated-reports
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Started {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Found 3 daily reports to process {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"fa7417aa-538e-49ab-8827-77235637a6f9","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"63e6d70b-b7cb-4dfa-8443-53453e6c4054","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"7e7846e2-c0ea-4040-88f4-0ae14b66ade8","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Completed {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
root@c78a087b1345:/home/jiminny# php artisan automated-reports --report-id 35
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Started {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[automated-reports] Automated report found Test 6
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Found 1 daily reports to process {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"7e7846e2-c0ea-4040-88f4-0ae14b66ade8","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Completed {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
root@c78a087b1345:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@b79a4bdd6905:/home/jiminny# php artisan automated-reports --report-id 71b8bbf5-23f4-41df-b637-693765e7aa78
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Started {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[automated-reports] Automated report found Tuesday report
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Found 1 daily reports to process {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"71b8bbf5-23f4-41df-b637-693765e7aa78","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Completed {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
root@b79a4bdd6905:/home/jiminny# php artisan automated-reports:send
root@b79a4bdd6905:/home/jiminny# php artisan tinker
Psy Shell v0.12.21 (PHP 8.3.30 — cli) by Justin Hileman
New PHP manual is available (latest: 3.0.5). Update with `doc --update-manual`
> $repo = app(AutomatedReportsRepository::class);
[!] Aliasing 'AutomatedReportsRepository' to 'Jiminny\Repositories\AutomatedReportsRepository' for this Tinker session.
= Jiminny\Repositories\AutomatedReportsRepository {#15215}
> $repo->getGeneratedNotSentResults();
= Illuminate\Database\Eloquent\Collection {#15683
all: [
Jiminny\Models\AutomatedReportResult {#15703
id: 14,
uuid: b"C^Ð>!€]¢ª1vàý\x1F6Ï",
report_id: 8,
name: "Exec Summary - 5 Sep 2024 - 10 Mar 2026 - All",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"team_id":1,"request_id":"21805da2-d03e-435e-aa31-76e0fd1f36cf","report_type":"exec_summary","media_types":["pdf","podcast"],"from_date":"2024-09-05T00:00:00+00:00","to_date":"2026-03-10T23:59:59+00:00","group_ids":[],"call_deal_stage":[],"current_deal_stage":[],"deal_min_value":null,"deal_max_value":null,"call_types":["conference","dialer"],"call_duration_min_seconds":null,"call_duration_max_seconds":null,"special_requirements":"","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"5 Sep 2024 - 10 Mar 2026","playbook_categories":[],"custom_name":null}",
response: "{"request_id":"21805da2-d03e-435e-aa31-76e0fd1f36cf","status":"completed","timestamp":"2026-03-26T14:10:58.983895+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf.MD","report_type":"exec_summary","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf.pdf","podcast_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.txt","podcast_audio_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.mp3","podcast_ssml_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.ssml"}",
requested_at: "2026-03-26 14:06:35",
generated_at: "2026-03-26 14:10:59",
sent_at: null,
created_at: "2026-03-26 14:06:35",
updated_at: "2026-03-26 14:10:59",
report: Jiminny\Models\AutomatedReport {#15197
id: 8,
#uuid: b"FWNçôý\x1Dªš–+âga”d",
team_id: 1,
type: "exec_summary",
status: 1,
frequency: "one_off",
from: "2024-09-05 00:00:00",
to: "2026-03-10 00:00:00",
deal_value_min: null,
deal_value_max: null,
call_types: "["conference","dialer"]",
media_types: "["pdf","podcast"]",
call_duration_min: null,
call_duration_max: null,
groups: "[]",
playbook_categories: "[]",
deal_at_call_stages: "[]",
current_deal_stages: "[]",
recipients: "{"users":[]}",
jiminny_recipients: "{"users":[]}",
additional_prompt_input: "",
custom_name: null,
activity_search_id: null,
ask_anything_prompt_id: null,
expires_at: null,
created_by: 3248,
created_at: "2026-03-26 14:06:32",
updated_at: "2026-03-26 14:06:32",
deleted_at: null,
},
},
Jiminny\Models\AutomatedReportResult {#15701
id: 43,
uuid: b"GJ—\x14?§ÄÉøN_0A}Ý",
report_id: 33,
name: "Ask Jiminny test report - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"test","call_ids":["54964443","54964442","54214348","54747783","54792639","54355211","54214356","54214362","54373257","54276602","54547166","54357434","54638437","54439335","54184628","54435911","54547029","54580912","54314274","53918272","54447612","54561308","52175046","54531535","54495620","52753147","52175055","54358692","54020412","54424068","54222599","53852885","52697526","53944212","54222051","54125650","54284918","54137014","54142985","53755346","54078231","52175067","54021634","53971125","54077453","54010996","52759195","53028445","54065927","52175082","53920744","54020314","52714861","53765213","53926207","52175042","52948707","53602066","53824355","53769276","53048081","52263045","52564798","53604424","53575428","52167221","53545307","53545088","53606423","52956249","52894249","52568574","52527230","53058889","52760234","52263048","52451159","52175073","52358247","52189687","52232025","51980465","52430474","52363300","52346694","52359342","52231503","52255239","50934254","52303651","52258169","51958927","52242714","52239097","52083853","52083904","51765719","52072580","51525359","51806803"],"team_id":1,"request_id":"3fa7c4c9-9714-474a-adf8-4e5f30417ddd","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Ask Jiminny test report"}",
response: "{"request_id":"3fa7c4c9-9714-474a-adf8-4e5f30417ddd","status":"completed","timestamp":"2026-04-14T07:49:35.099004+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/3fa7c4c9-9714-474a-adf8-4e5f30417ddd.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/3fa7c4c9-9714-474a-adf8-4e5f30417ddd.pdf"}",
requested_at: "2026-04-14 07:49:04",
generated_at: "2026-04-14 07:49:35",
sent_at: null,
created_at: "2026-04-14 07:49:03",
updated_at: "2026-04-14 07:49:35",
report: Jiminny\Models\AutomatedReport {#15196
id: 33,
#uuid: b"I«SŽút\x17ªˆ'w#V7¦ù",
team_id: 1,
type: "ask_jiminny",
status: 1,
frequency: "daily",
from: null,
to: null,
deal_value_min: null,
deal_value_max: null,
call_types: "[]",
media_types: "["pdf"]",
call_duration_min: null,
call_duration_max: null,
groups: "[9]",
playbook_categories: null,
deal_at_call_stages: null,
current_deal_stages: null,
recipients: "{"users":[7160,23309]}",
jiminny_recipients: null,
additional_prompt_input: null,
custom_name: "Ask Jiminny test report",
activity_search_id: 26912,
ask_anything_prompt_id: 62,
expires_at: "2026-04-30",
created_by: 7160,
created_at: "2026-04-08 10:12:30",
updated_at: "2026-04-08 10:12:30",
deleted_at: null,
},
},
Jiminny\Models\AutomatedReportResult {#15700
id: 45,
uuid: b"A¢•M8z~‚*l\x01÷ð\0s",
report_id: 33,
name: "Ask Jiminny test report - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"test","call_ids":["54964443","54964442","54214348","54747783","54792639","54355211","54214356","54214362","54373257","54276602","54547166","54357434","54638437","54439335","54184628","54435911","54547029","54580912","54314274","53918272","54447612","54561308","52175046","54531535","54495620","52753147","52175055","54358692","54020412","54424068","54222599","53852885","52697526","53944212","54222051","54125650","54284918","54137014","54142985","53755346","54078231","52175067","54021634","53971125","54077453","54010996","52759195","53028445","54065927","52175082","53920744","54020314","52714861","53765213","53926207","52175042","52948707","53602066","53824355","53769276","53048081","52263045","52564798","53604424","53575428","52167221","53545307","53545088","53606423","52956249","52894249","52568574","52527230","53058889","52760234","52263048","52451159","52175073","52358247","52189687","52232025","51980465","52430474","52363300","52346694","52359342","52231503","52255239","50934254","52303651","52258169","51958927","52242714","52239097","52083853","52083904","51765719","52072580","51525359","51806803"],"team_id":1,"request_id":"38817a7e-954d-41a2-822a-6c01f7f00073","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Ask Jiminny test report"}",
response: "{"request_id":"38817a7e-954d-41a2-822a-6c01f7f00073","status":"completed","timestamp":"2026-04-14T08:41:46.594895+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/38817a7e-954d-41a2-822a-6c01f7f00073.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/38817a7e-954d-41a2-822a-6c01f7f00073.pdf"}",
requested_at: "2026-04-14 08:41:11",
generated_at: "2026-04-14 08:41:46",
sent_at: null,
created_at: "2026-04-14 08:41:11",
updated_at: "2026-04-14 08:41:46",
report: Jiminny\Models\AutomatedReport {#15196},
},
Jiminny\Models\AutomatedReportResult {#15705
id: 47,
uuid: b"D‘\x10[̘^–𔹧-ÞÝB",
report_id: 33,
name: "Ask Jiminny test report - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"test","call_ids":["54964443","54964442","54214348","54747783","54792639","54355211","54214356","54214362","54373257","54276602","54547166","54357434","54638437","54439335","54184628","54435911","54547029","54580912","54314274","53918272","54447612","54561308","52175046","54531535","54495620","52753147","52175055","54358692","54020412","54424068","54222599","53852885","52697526","53944212","54222051","54125650","54284918","54137014","54142985","53755346","54078231","52175067","54021634","53971125","54077453","54010996","52759195","53028445","54065927","52175082","53920744","54020314","52714861","53765213","53926207","52175042","52948707","53602066","53824355","53769276","53048081","52263045","52564798","53604424","53575428","52167221","53545307","53545088","53606423","52956249","52894249","52568574","52527230","53058889","52760234","52263048","52451159","52175073","52358247","52189687","52232025","51980465","52430474","52363300","52346694","52359342","52231503","52255239","50934254","52303651","52258169","51958927","52242714","52239097","52083853","52083904","51765719","52072580","51525359","51806803"],"team_id":1,"request_id":"cc985e96-105b-4491-9a94-b9a72ddedd42","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Ask Jiminny test report"}",
response: "{"request_id":"cc985e96-105b-4491-9a94-b9a72ddedd42","status":"completed","timestamp":"2026-04-14T10:46:38.602513+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/cc985e96-105b-4491-9a94-b9a72ddedd42.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/cc985e96-105b-4491-9a94-b9a72ddedd42.pdf"}",
requested_at: "2026-04-14 10:46:09",
generated_at: "2026-04-14 10:46:38",
sent_at: null,
created_at: "2026-04-14 10:46:08",
updated_at: "2026-04-14 10:46:38",
report: Jiminny\Models\AutomatedReport {#15196},
},
Jiminny\Models\AutomatedReportResult {#15687
id: 49,
uuid: b"K·Ì¬Ò\vþþ«PÈ»‰\x19™s",
report_id: 35,
name: "Test 6 - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"Please make a summary for all calls","call_ids":["49880280","49104686","48360159","47193308","44762288","43862984","41678335","41310991","39940631","39779620","39389894","39106205","38745110","38510502"],"team_id":1,"request_id":"d20bfefe-ccac-4bb7-ab50-c8bb89199973","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Test 6"}",
response: "{"request_id":"d20bfefe-ccac-4bb7-ab50-c8bb89199973","status":"completed","timestamp":"2026-04-14T10:46:37.905336+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/d20bfefe-ccac-4bb7-ab50-c8bb89199973.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/d20bfefe-ccac-4bb7-ab50-c8bb89199973.pdf"}",
requested_at: "2026-04-14 10:46:16",
generated_at: "2026-04-14 10:46:37",
sent_at: null,
created_at: "2026-04-14 10:46:16",
updated_at: "2026-04-14 10:46:38",
report: Jiminny\Models\AutomatedReport {#15219
id: 35,
#uuid: b"""
@@Àê~xFâˆô\n
áKfè
""",
team_id: 1,
type: "ask_jiminny",
status: 1,
frequency: "daily",
from: null,
to: null,
deal_value_min: null,
deal_value_max: null,
call_types: "[]",
media_types: "["pdf"]",
call_duration_min: null,
call_duration_max: null,
groups: "[9]",
playbook_categories: null,
deal_at_call_stages: null,
current_deal_stages: null,
recipients: "{"users":[3248,23559]}",
jiminny_recipients: null,
additional_prompt_input: null,
custom_name: "Test 6",
activity_search_id: 10932,
ask_anything_prompt_id: 65,
expires_at: "2026-04-19",
created_by: 3248,
created_at: "2026-04-14 08:39:14",
updated_at: "2026-04-14 08:39:14",
deleted_at: null,
},
},
Jiminny\Models\AutomatedReportResult {#15686
id: 50,
uuid: b"GÙµ‚\{3‡p©ú1ÿÖŽ",
report_id: 35,
name: "Test 6 - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"Please make a summary for all calls","call_ids":["49880280","49104686","48360159","47193308","44762288","43862984","41678335","41310991","39940631","39779620","39389894","39106205","38745110","38510502"],"team_id":1,"request_id":"5c9d7b33-b582-47d9-8770-a9fa31ffd68d","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Test 6"}",
response: "{"request_id":"5c9d7b33-b582-47d9-8770-a9fa31ffd68d","status":"completed","timestamp":"2026-04-14T10:49:01.677577+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/5c9d7b33-b582-47d9-8770-a9fa31ffd68d.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/5c9d7b33-b582-47d9-8770-a9fa31ffd68d.pdf"}",
requested_at: "2026-04-14 10:48:43",
generated_at: "2026-04-14 10:49:01",
sent_at: null,
created_at: "2026-04-14 10:48:42",
updated_at: "2026-04-14 10:49:01",
report: Jiminny\Models\AutomatedReport {#15219},
},
Jiminny\Models\AutomatedReportResult {#15685
id: 51,
uuid: b"L\x13HSÏÖ»™ŸŽ¦¯Cár{",
report_id: 36,
name: "Tuesday report - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"test","call_ids":["54214348","54747783","54792639","54355211","54214356","54579532","54214362","54795501","54373257","54566775","54179068","54691680","54702966","54186485","54547166","54357434","54439335","54435911","54547029","54179299","54580912","54314274","53918272","54310744","54447612","54561308","52175046","54531535","54495620","52753147","53853301","52551697","52175055","54358692","54020412","54424068","54222599","53853298","53852885","53931221","54132327","53944212","54037186","54125650","54059512","53801108","54284918","52552430","54142985","53755346","52175067","54021634","52896288","52175051","54077453","52413114","54010996","53528248","54078291","53813598","54076266","53028445","54065927","53922780","53729434","53919824","53384442","52175082","53920744","54020314","52714861","54009217","53765213","53926207","52175042","52948707","53602066","53824355","53769276","53048081","53769369","53384450","52161199","52263045","52564798","50907426","53604424","53575428","52167221","52156369","53545307","52565625","53610225","53594648","53545088","52175041","52956249","52217425","52562272","52248293"],"team_id":1,"request_id":"cfd6bb99-4853-4c13-9f8e-a6af43e1727b","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Tuesday report"}",
response: "{"request_id":"cfd6bb99-4853-4c13-9f8e-a6af43e1727b","status":"completed","timestamp":"2026-04-14T11:23:03.951289+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/cfd6bb99-4853-4c13-9f8e-a6af43e1727b.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/cfd6bb99-4853-4c13-9f8e-a6af43e1727b.pdf"}",
requested_at: "2026-04-14 11:22:36",
generated_at: "2026-04-14 11:23:04",
sent_at: null,
created_at: "2026-04-14 11:22:36",
updated_at: "2026-04-14 11:23:04",
report: Jiminny\Models\AutomatedReport {#15221
id: 36,
#uuid: b"Aß#ôq¸»õ¶7i7eçªx",
team_id: 1,
type: "ask_jiminny",
status: 1,
frequency: "daily",
from: null,
to: null,
deal_value_min: null,
deal_value_max: null,
call_types: "[]",
media_types: "["pdf"]",
call_duration_min: null,
call_duration_max: null,
groups: "[]",
playbook_categories: null,
deal_at_call_stages: null,
current_deal_stages: null,
recipients: "{"users":[7160]}",
jiminny_recipients: null,
additional_prompt_input: null,
custom_name: "Tuesday report",
activity_search_id: 26913,
ask_anything_prompt_id: 62,
expires_at: "2026-04-30",
created_by: 7160,
created_at: "2026-04-14 11:20:20",
updated_at: "2026-04-14 11:20:20",
deleted_at: null,
},
},
],
}
> $repo->getGeneratedNotSentResults()->count();
= 7
> exit
INFO Goodbye.
root@b79a4bdd6905:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@d1ac6fe11762:/home/jiminny#
DOCKER
Close Tab
DEV (docker)
Close Tab
APP (-zsh)
Close Tab
ec2-user@ip-10-30-93-249:~ (nc)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
✳ Unable to access screenpipe activity data (claude)
Close Tab
⌥⌘1
ec2-user@ip-10-30-93-249:~...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Sat Apr 11 12:38:35 on ttys007\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ vstg\nWarning: Permanently added 'jiminny-stage-ecs1' (ED25519) to the list of known hosts.\n\nA newer release of \"Amazon Linux\" is available.\n Version 2023.10.20260105:\n Version 2023.10.20260120:\n Version 2023.10.20260202:\n Version 2023.10.20260216:\n Version 2023.10.20260302:\n Version 2023.10.20260325:\n Version 2023.10.20260330:\n Version 2023.11.20260406:\n Version 2023.11.20260413:\n Version 2023.8.20250707:\n Version 2023.8.20250715:\n Version 2023.8.20250721:\n Version 2023.8.20250808:\n Version 2023.8.20250818:\n Version 2023.8.20250908:\n Version 2023.8.20250915:\n Version 2023.9.20250929:\n Version 2023.9.20251014:\n Version 2023.9.20251020:\n Version 2023.9.20251027:\n Version 2023.9.20251105:\n Version 2023.9.20251110:\n Version 2023.9.20251117:\n Version 2023.9.20251208:\nRun \"/usr/bin/dnf check-release-update\" for full release and version update info\n , #_\n ~\\_ ####_\n ~~ \\_#####\\\n ~~ \\###|\n ~~ \\#/ ___ Amazon Linux 2023 (ECS Optimized)\n ~~ V~' '->\n ~~~ /\n ~~._. _/\n _/ _/\n _/m/'\n\nFor documentation, visit http://aws.amazon.com/documentation/ecs\n[ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@fee51d2e1f17:/home/jiminny# php artisan about\n\n Environment ...................................................................................................................................... \n Application Name ................................................................................................................. Jiminny Web App \n Laravel Version .......................................................................................................................... 12.54.1 \n PHP Version ............................................................................................................................... 8.3.30 \n Composer Version ............................................................................................................................... - \n Environment .............................................................................................................................. staging \n Debug Mode ................................................................................................................................... OFF \n URL ...................................................................................................................... app.staging.jiminny.com \n Maintenance Mode ............................................................................................................................. OFF \n Timezone ..................................................................................................................................... UTC \n Locale ..................................................................................................................................... en_US \n\n Cache ............................................................................................................................................ \n Config .................................................................................................................................... CACHED \n Events ................................................................................................................................ NOT CACHED \n Routes .................................................................................................................................... CACHED \n Views ..................................................................................................................................... CACHED \n\n Drivers .......................................................................................................................................... \n Broadcasting .............................................................................................................................. pusher \n Cache ...................................................................................................................................... redis \n Database ................................................................................................................................... mysql \n Logs .................................................................................................................................... errorlog \n Mail ......................................................................................................................................... ses \n Queue ........................................................................................................................................ sqs \n Session .................................................................................................................................... redis \n\n Storage .......................................................................................................................................... \n public/storage ........................................................................................................................ NOT LINKED \n\n Sentry ........................................................................................................................................... \n Enabled ...................................................................................................................................... YES \n Environment .............................................................................................................................. staging \n Laravel SDK Version ....................................................................................................................... 4.13.0 \n PHP SDK Version ........................................................................................................................... 4.13.0 \n Release ................................................................................................................................... 869720 \n Sample Rate Errors .......................................................................................................................... 100% \n Sample Rate Performance Monitoring ....................................................................................................... NOT SET \n Sample Rate Profiling .................................................................................................................... NOT SET \n Send Default PII ........................................................................................................................ DISABLED \n\nroot@fee51d2e1f17:/home/jiminny# php artisan automated-reports\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Started {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Found 2 daily reports to process {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"fa7417aa-538e-49ab-8827-77235637a6f9\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"63e6d70b-b7cb-4dfa-8443-53453e6c4054\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\nroot@fee51d2e1f17:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@73b64f5d54a3:/home/jiminny# php artisan automated-reports\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Started {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Found 3 daily reports to process {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"fa7417aa-538e-49ab-8827-77235637a6f9\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"63e6d70b-b7cb-4dfa-8443-53453e6c4054\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:04] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"7e7846e2-c0ea-4040-88f4-0ae14b66ade8\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:04] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\nroot@73b64f5d54a3:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@c78a087b1345:/home/jiminny# php artisan automated-reports\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Started {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Found 3 daily reports to process {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"fa7417aa-538e-49ab-8827-77235637a6f9\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"63e6d70b-b7cb-4dfa-8443-53453e6c4054\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"7e7846e2-c0ea-4040-88f4-0ae14b66ade8\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\nroot@c78a087b1345:/home/jiminny# php artisan automated-reports --report-id 35\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Started {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[automated-reports] Automated report found Test 6\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Found 1 daily reports to process {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"7e7846e2-c0ea-4040-88f4-0ae14b66ade8\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\nroot@c78a087b1345:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@b79a4bdd6905:/home/jiminny# php artisan automated-reports --report-id 71b8bbf5-23f4-41df-b637-693765e7aa78\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Started {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[automated-reports] Automated report found Tuesday report\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Found 1 daily reports to process {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"71b8bbf5-23f4-41df-b637-693765e7aa78\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\nroot@b79a4bdd6905:/home/jiminny# php artisan automated-reports:send\nroot@b79a4bdd6905:/home/jiminny# php artisan tinker\nPsy Shell v0.12.21 (PHP 8.3.30 — cli) by Justin Hileman\nNew PHP manual is available (latest: 3.0.5). Update with `doc --update-manual`\n> $repo = app(AutomatedReportsRepository::class);\n[!] Aliasing 'AutomatedReportsRepository' to 'Jiminny\\Repositories\\AutomatedReportsRepository' for this Tinker session.\n= Jiminny\\Repositories\\AutomatedReportsRepository {#15215}\n\n> $repo->getGeneratedNotSentResults();\n= Illuminate\\Database\\Eloquent\\Collection {#15683\n all: [\n Jiminny\\Models\\AutomatedReportResult {#15703\n id: 14,\n uuid: b\"C^Ð>!€]¢ª1vàý\\x1F6Ï\",\n report_id: 8,\n name: \"Exec Summary - 5 Sep 2024 - 10 Mar 2026 - All\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"team_id\":1,\"request_id\":\"21805da2-d03e-435e-aa31-76e0fd1f36cf\",\"report_type\":\"exec_summary\",\"media_types\":[\"pdf\",\"podcast\"],\"from_date\":\"2024-09-05T00:00:00+00:00\",\"to_date\":\"2026-03-10T23:59:59+00:00\",\"group_ids\":[],\"call_deal_stage\":[],\"current_deal_stage\":[],\"deal_min_value\":null,\"deal_max_value\":null,\"call_types\":[\"conference\",\"dialer\"],\"call_duration_min_seconds\":null,\"call_duration_max_seconds\":null,\"special_requirements\":\"\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"5 Sep 2024 - 10 Mar 2026\",\"playbook_categories\":[],\"custom_name\":null}\",\n response: \"{\"request_id\":\"21805da2-d03e-435e-aa31-76e0fd1f36cf\",\"status\":\"completed\",\"timestamp\":\"2026-03-26T14:10:58.983895+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf.MD\",\"report_type\":\"exec_summary\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf.pdf\",\"podcast_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.txt\",\"podcast_audio_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.mp3\",\"podcast_ssml_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.ssml\"}\",\n requested_at: \"2026-03-26 14:06:35\",\n generated_at: \"2026-03-26 14:10:59\",\n sent_at: null,\n created_at: \"2026-03-26 14:06:35\",\n updated_at: \"2026-03-26 14:10:59\",\n report: Jiminny\\Models\\AutomatedReport {#15197\n id: 8,\n #uuid: b\"FWNçôý\\x1Dªš–+âga”d\",\n team_id: 1,\n type: \"exec_summary\",\n status: 1,\n frequency: \"one_off\",\n from: \"2024-09-05 00:00:00\",\n to: \"2026-03-10 00:00:00\",\n deal_value_min: null,\n deal_value_max: null,\n call_types: \"[\"conference\",\"dialer\"]\",\n media_types: \"[\"pdf\",\"podcast\"]\",\n call_duration_min: null,\n call_duration_max: null,\n groups: \"[]\",\n playbook_categories: \"[]\",\n deal_at_call_stages: \"[]\",\n current_deal_stages: \"[]\",\n recipients: \"{\"users\":[]}\",\n jiminny_recipients: \"{\"users\":[]}\",\n additional_prompt_input: \"\",\n custom_name: null,\n activity_search_id: null,\n ask_anything_prompt_id: null,\n expires_at: null,\n created_by: 3248,\n created_at: \"2026-03-26 14:06:32\",\n updated_at: \"2026-03-26 14:06:32\",\n deleted_at: null,\n },\n },\n Jiminny\\Models\\AutomatedReportResult {#15701\n id: 43,\n uuid: b\"GJ—\\x14?§ÄÉøN_0A}Ý\",\n report_id: 33,\n name: \"Ask Jiminny test report - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"test\",\"call_ids\":[\"54964443\",\"54964442\",\"54214348\",\"54747783\",\"54792639\",\"54355211\",\"54214356\",\"54214362\",\"54373257\",\"54276602\",\"54547166\",\"54357434\",\"54638437\",\"54439335\",\"54184628\",\"54435911\",\"54547029\",\"54580912\",\"54314274\",\"53918272\",\"54447612\",\"54561308\",\"52175046\",\"54531535\",\"54495620\",\"52753147\",\"52175055\",\"54358692\",\"54020412\",\"54424068\",\"54222599\",\"53852885\",\"52697526\",\"53944212\",\"54222051\",\"54125650\",\"54284918\",\"54137014\",\"54142985\",\"53755346\",\"54078231\",\"52175067\",\"54021634\",\"53971125\",\"54077453\",\"54010996\",\"52759195\",\"53028445\",\"54065927\",\"52175082\",\"53920744\",\"54020314\",\"52714861\",\"53765213\",\"53926207\",\"52175042\",\"52948707\",\"53602066\",\"53824355\",\"53769276\",\"53048081\",\"52263045\",\"52564798\",\"53604424\",\"53575428\",\"52167221\",\"53545307\",\"53545088\",\"53606423\",\"52956249\",\"52894249\",\"52568574\",\"52527230\",\"53058889\",\"52760234\",\"52263048\",\"52451159\",\"52175073\",\"52358247\",\"52189687\",\"52232025\",\"51980465\",\"52430474\",\"52363300\",\"52346694\",\"52359342\",\"52231503\",\"52255239\",\"50934254\",\"52303651\",\"52258169\",\"51958927\",\"52242714\",\"52239097\",\"52083853\",\"52083904\",\"51765719\",\"52072580\",\"51525359\",\"51806803\"],\"team_id\":1,\"request_id\":\"3fa7c4c9-9714-474a-adf8-4e5f30417ddd\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Ask Jiminny test report\"}\",\n response: \"{\"request_id\":\"3fa7c4c9-9714-474a-adf8-4e5f30417ddd\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T07:49:35.099004+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/3fa7c4c9-9714-474a-adf8-4e5f30417ddd.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/3fa7c4c9-9714-474a-adf8-4e5f30417ddd.pdf\"}\",\n requested_at: \"2026-04-14 07:49:04\",\n generated_at: \"2026-04-14 07:49:35\",\n sent_at: null,\n created_at: \"2026-04-14 07:49:03\",\n updated_at: \"2026-04-14 07:49:35\",\n report: Jiminny\\Models\\AutomatedReport {#15196\n id: 33,\n #uuid: b\"I«SŽút\\x17ªˆ'w#V7¦ù\",\n team_id: 1,\n type: \"ask_jiminny\",\n status: 1,\n frequency: \"daily\",\n from: null,\n to: null,\n deal_value_min: null,\n deal_value_max: null,\n call_types: \"[]\",\n media_types: \"[\"pdf\"]\",\n call_duration_min: null,\n call_duration_max: null,\n groups: \"[9]\",\n playbook_categories: null,\n deal_at_call_stages: null,\n current_deal_stages: null,\n recipients: \"{\"users\":[7160,23309]}\",\n jiminny_recipients: null,\n additional_prompt_input: null,\n custom_name: \"Ask Jiminny test report\",\n activity_search_id: 26912,\n ask_anything_prompt_id: 62,\n expires_at: \"2026-04-30\",\n created_by: 7160,\n created_at: \"2026-04-08 10:12:30\",\n updated_at: \"2026-04-08 10:12:30\",\n deleted_at: null,\n },\n },\n Jiminny\\Models\\AutomatedReportResult {#15700\n id: 45,\n uuid: b\"A¢•M8z~‚*l\\x01÷ð\\0s\",\n report_id: 33,\n name: \"Ask Jiminny test report - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"test\",\"call_ids\":[\"54964443\",\"54964442\",\"54214348\",\"54747783\",\"54792639\",\"54355211\",\"54214356\",\"54214362\",\"54373257\",\"54276602\",\"54547166\",\"54357434\",\"54638437\",\"54439335\",\"54184628\",\"54435911\",\"54547029\",\"54580912\",\"54314274\",\"53918272\",\"54447612\",\"54561308\",\"52175046\",\"54531535\",\"54495620\",\"52753147\",\"52175055\",\"54358692\",\"54020412\",\"54424068\",\"54222599\",\"53852885\",\"52697526\",\"53944212\",\"54222051\",\"54125650\",\"54284918\",\"54137014\",\"54142985\",\"53755346\",\"54078231\",\"52175067\",\"54021634\",\"53971125\",\"54077453\",\"54010996\",\"52759195\",\"53028445\",\"54065927\",\"52175082\",\"53920744\",\"54020314\",\"52714861\",\"53765213\",\"53926207\",\"52175042\",\"52948707\",\"53602066\",\"53824355\",\"53769276\",\"53048081\",\"52263045\",\"52564798\",\"53604424\",\"53575428\",\"52167221\",\"53545307\",\"53545088\",\"53606423\",\"52956249\",\"52894249\",\"52568574\",\"52527230\",\"53058889\",\"52760234\",\"52263048\",\"52451159\",\"52175073\",\"52358247\",\"52189687\",\"52232025\",\"51980465\",\"52430474\",\"52363300\",\"52346694\",\"52359342\",\"52231503\",\"52255239\",\"50934254\",\"52303651\",\"52258169\",\"51958927\",\"52242714\",\"52239097\",\"52083853\",\"52083904\",\"51765719\",\"52072580\",\"51525359\",\"51806803\"],\"team_id\":1,\"request_id\":\"38817a7e-954d-41a2-822a-6c01f7f00073\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Ask Jiminny test report\"}\",\n response: \"{\"request_id\":\"38817a7e-954d-41a2-822a-6c01f7f00073\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T08:41:46.594895+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/38817a7e-954d-41a2-822a-6c01f7f00073.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/38817a7e-954d-41a2-822a-6c01f7f00073.pdf\"}\",\n requested_at: \"2026-04-14 08:41:11\",\n generated_at: \"2026-04-14 08:41:46\",\n sent_at: null,\n created_at: \"2026-04-14 08:41:11\",\n updated_at: \"2026-04-14 08:41:46\",\n report: Jiminny\\Models\\AutomatedReport {#15196},\n },\n Jiminny\\Models\\AutomatedReportResult {#15705\n id: 47,\n uuid: b\"D‘\\x10[̘^–𔹧-ÞÝB\",\n report_id: 33,\n name: \"Ask Jiminny test report - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"test\",\"call_ids\":[\"54964443\",\"54964442\",\"54214348\",\"54747783\",\"54792639\",\"54355211\",\"54214356\",\"54214362\",\"54373257\",\"54276602\",\"54547166\",\"54357434\",\"54638437\",\"54439335\",\"54184628\",\"54435911\",\"54547029\",\"54580912\",\"54314274\",\"53918272\",\"54447612\",\"54561308\",\"52175046\",\"54531535\",\"54495620\",\"52753147\",\"52175055\",\"54358692\",\"54020412\",\"54424068\",\"54222599\",\"53852885\",\"52697526\",\"53944212\",\"54222051\",\"54125650\",\"54284918\",\"54137014\",\"54142985\",\"53755346\",\"54078231\",\"52175067\",\"54021634\",\"53971125\",\"54077453\",\"54010996\",\"52759195\",\"53028445\",\"54065927\",\"52175082\",\"53920744\",\"54020314\",\"52714861\",\"53765213\",\"53926207\",\"52175042\",\"52948707\",\"53602066\",\"53824355\",\"53769276\",\"53048081\",\"52263045\",\"52564798\",\"53604424\",\"53575428\",\"52167221\",\"53545307\",\"53545088\",\"53606423\",\"52956249\",\"52894249\",\"52568574\",\"52527230\",\"53058889\",\"52760234\",\"52263048\",\"52451159\",\"52175073\",\"52358247\",\"52189687\",\"52232025\",\"51980465\",\"52430474\",\"52363300\",\"52346694\",\"52359342\",\"52231503\",\"52255239\",\"50934254\",\"52303651\",\"52258169\",\"51958927\",\"52242714\",\"52239097\",\"52083853\",\"52083904\",\"51765719\",\"52072580\",\"51525359\",\"51806803\"],\"team_id\":1,\"request_id\":\"cc985e96-105b-4491-9a94-b9a72ddedd42\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Ask Jiminny test report\"}\",\n response: \"{\"request_id\":\"cc985e96-105b-4491-9a94-b9a72ddedd42\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T10:46:38.602513+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/cc985e96-105b-4491-9a94-b9a72ddedd42.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/cc985e96-105b-4491-9a94-b9a72ddedd42.pdf\"}\",\n requested_at: \"2026-04-14 10:46:09\",\n generated_at: \"2026-04-14 10:46:38\",\n sent_at: null,\n created_at: \"2026-04-14 10:46:08\",\n updated_at: \"2026-04-14 10:46:38\",\n report: Jiminny\\Models\\AutomatedReport {#15196},\n },\n Jiminny\\Models\\AutomatedReportResult {#15687\n id: 49,\n uuid: b\"K·Ì¬Ò\\vþþ«PÈ»‰\\x19™s\",\n report_id: 35,\n name: \"Test 6 - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"Please make a summary for all calls\",\"call_ids\":[\"49880280\",\"49104686\",\"48360159\",\"47193308\",\"44762288\",\"43862984\",\"41678335\",\"41310991\",\"39940631\",\"39779620\",\"39389894\",\"39106205\",\"38745110\",\"38510502\"],\"team_id\":1,\"request_id\":\"d20bfefe-ccac-4bb7-ab50-c8bb89199973\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Test 6\"}\",\n response: \"{\"request_id\":\"d20bfefe-ccac-4bb7-ab50-c8bb89199973\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T10:46:37.905336+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/d20bfefe-ccac-4bb7-ab50-c8bb89199973.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/d20bfefe-ccac-4bb7-ab50-c8bb89199973.pdf\"}\",\n requested_at: \"2026-04-14 10:46:16\",\n generated_at: \"2026-04-14 10:46:37\",\n sent_at: null,\n created_at: \"2026-04-14 10:46:16\",\n updated_at: \"2026-04-14 10:46:38\",\n report: Jiminny\\Models\\AutomatedReport {#15219\n id: 35,\n #uuid: b\"\"\"\n @@Àê~xFâˆô\\n\n áKfè\n \"\"\",\n team_id: 1,\n type: \"ask_jiminny\",\n status: 1,\n frequency: \"daily\",\n from: null,\n to: null,\n deal_value_min: null,\n deal_value_max: null,\n call_types: \"[]\",\n media_types: \"[\"pdf\"]\",\n call_duration_min: null,\n call_duration_max: null,\n groups: \"[9]\",\n playbook_categories: null,\n deal_at_call_stages: null,\n current_deal_stages: null,\n recipients: \"{\"users\":[3248,23559]}\",\n jiminny_recipients: null,\n additional_prompt_input: null,\n custom_name: \"Test 6\",\n activity_search_id: 10932,\n ask_anything_prompt_id: 65,\n expires_at: \"2026-04-19\",\n created_by: 3248,\n created_at: \"2026-04-14 08:39:14\",\n updated_at: \"2026-04-14 08:39:14\",\n deleted_at: null,\n },\n },\n Jiminny\\Models\\AutomatedReportResult {#15686\n id: 50,\n uuid: b\"GÙµ‚\\{3‡p©ú1ÿÖŽ\",\n report_id: 35,\n name: \"Test 6 - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"Please make a summary for all calls\",\"call_ids\":[\"49880280\",\"49104686\",\"48360159\",\"47193308\",\"44762288\",\"43862984\",\"41678335\",\"41310991\",\"39940631\",\"39779620\",\"39389894\",\"39106205\",\"38745110\",\"38510502\"],\"team_id\":1,\"request_id\":\"5c9d7b33-b582-47d9-8770-a9fa31ffd68d\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Test 6\"}\",\n response: \"{\"request_id\":\"5c9d7b33-b582-47d9-8770-a9fa31ffd68d\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T10:49:01.677577+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/5c9d7b33-b582-47d9-8770-a9fa31ffd68d.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/5c9d7b33-b582-47d9-8770-a9fa31ffd68d.pdf\"}\",\n requested_at: \"2026-04-14 10:48:43\",\n generated_at: \"2026-04-14 10:49:01\",\n sent_at: null,\n created_at: \"2026-04-14 10:48:42\",\n updated_at: \"2026-04-14 10:49:01\",\n report: Jiminny\\Models\\AutomatedReport {#15219},\n },\n Jiminny\\Models\\AutomatedReportResult {#15685\n id: 51,\n uuid: b\"L\\x13HSÏÖ»™ŸŽ¦¯Cár{\",\n report_id: 36,\n name: \"Tuesday report - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"test\",\"call_ids\":[\"54214348\",\"54747783\",\"54792639\",\"54355211\",\"54214356\",\"54579532\",\"54214362\",\"54795501\",\"54373257\",\"54566775\",\"54179068\",\"54691680\",\"54702966\",\"54186485\",\"54547166\",\"54357434\",\"54439335\",\"54435911\",\"54547029\",\"54179299\",\"54580912\",\"54314274\",\"53918272\",\"54310744\",\"54447612\",\"54561308\",\"52175046\",\"54531535\",\"54495620\",\"52753147\",\"53853301\",\"52551697\",\"52175055\",\"54358692\",\"54020412\",\"54424068\",\"54222599\",\"53853298\",\"53852885\",\"53931221\",\"54132327\",\"53944212\",\"54037186\",\"54125650\",\"54059512\",\"53801108\",\"54284918\",\"52552430\",\"54142985\",\"53755346\",\"52175067\",\"54021634\",\"52896288\",\"52175051\",\"54077453\",\"52413114\",\"54010996\",\"53528248\",\"54078291\",\"53813598\",\"54076266\",\"53028445\",\"54065927\",\"53922780\",\"53729434\",\"53919824\",\"53384442\",\"52175082\",\"53920744\",\"54020314\",\"52714861\",\"54009217\",\"53765213\",\"53926207\",\"52175042\",\"52948707\",\"53602066\",\"53824355\",\"53769276\",\"53048081\",\"53769369\",\"53384450\",\"52161199\",\"52263045\",\"52564798\",\"50907426\",\"53604424\",\"53575428\",\"52167221\",\"52156369\",\"53545307\",\"52565625\",\"53610225\",\"53594648\",\"53545088\",\"52175041\",\"52956249\",\"52217425\",\"52562272\",\"52248293\"],\"team_id\":1,\"request_id\":\"cfd6bb99-4853-4c13-9f8e-a6af43e1727b\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Tuesday report\"}\",\n response: \"{\"request_id\":\"cfd6bb99-4853-4c13-9f8e-a6af43e1727b\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T11:23:03.951289+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/cfd6bb99-4853-4c13-9f8e-a6af43e1727b.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/cfd6bb99-4853-4c13-9f8e-a6af43e1727b.pdf\"}\",\n requested_at: \"2026-04-14 11:22:36\",\n generated_at: \"2026-04-14 11:23:04\",\n sent_at: null,\n created_at: \"2026-04-14 11:22:36\",\n updated_at: \"2026-04-14 11:23:04\",\n report: Jiminny\\Models\\AutomatedReport {#15221\n id: 36,\n #uuid: b\"Aß#ôq¸»õ¶7i7eçªx\",\n team_id: 1,\n type: \"ask_jiminny\",\n status: 1,\n frequency: \"daily\",\n from: null,\n to: null,\n deal_value_min: null,\n deal_value_max: null,\n call_types: \"[]\",\n media_types: \"[\"pdf\"]\",\n call_duration_min: null,\n call_duration_max: null,\n groups: \"[]\",\n playbook_categories: null,\n deal_at_call_stages: null,\n current_deal_stages: null,\n recipients: \"{\"users\":[7160]}\",\n jiminny_recipients: null,\n additional_prompt_input: null,\n custom_name: \"Tuesday report\",\n activity_search_id: 26913,\n ask_anything_prompt_id: 62,\n expires_at: \"2026-04-30\",\n created_by: 7160,\n created_at: \"2026-04-14 11:20:20\",\n updated_at: \"2026-04-14 11:20:20\",\n deleted_at: null,\n },\n },\n ],\n }\n\n> $repo->getGeneratedNotSentResults()->count();\n= 7\n\n> exit\n\n INFO Goodbye.\n\nroot@b79a4bdd6905:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@d1ac6fe11762:/home/jiminny#","depth":4,"value":"Last login: Sat Apr 11 12:38:35 on ttys007\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ vstg\nWarning: Permanently added 'jiminny-stage-ecs1' (ED25519) to the list of known hosts.\n\nA newer release of \"Amazon Linux\" is available.\n Version 2023.10.20260105:\n Version 2023.10.20260120:\n Version 2023.10.20260202:\n Version 2023.10.20260216:\n Version 2023.10.20260302:\n Version 2023.10.20260325:\n Version 2023.10.20260330:\n Version 2023.11.20260406:\n Version 2023.11.20260413:\n Version 2023.8.20250707:\n Version 2023.8.20250715:\n Version 2023.8.20250721:\n Version 2023.8.20250808:\n Version 2023.8.20250818:\n Version 2023.8.20250908:\n Version 2023.8.20250915:\n Version 2023.9.20250929:\n Version 2023.9.20251014:\n Version 2023.9.20251020:\n Version 2023.9.20251027:\n Version 2023.9.20251105:\n Version 2023.9.20251110:\n Version 2023.9.20251117:\n Version 2023.9.20251208:\nRun \"/usr/bin/dnf check-release-update\" for full release and version update info\n , #_\n ~\\_ ####_\n ~~ \\_#####\\\n ~~ \\###|\n ~~ \\#/ ___ Amazon Linux 2023 (ECS Optimized)\n ~~ V~' '->\n ~~~ /\n ~~._. _/\n _/ _/\n _/m/'\n\nFor documentation, visit http://aws.amazon.com/documentation/ecs\n[ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@fee51d2e1f17:/home/jiminny# php artisan about\n\n Environment ...................................................................................................................................... \n Application Name ................................................................................................................. Jiminny Web App \n Laravel Version .......................................................................................................................... 12.54.1 \n PHP Version ............................................................................................................................... 8.3.30 \n Composer Version ............................................................................................................................... - \n Environment .............................................................................................................................. staging \n Debug Mode ................................................................................................................................... OFF \n URL ...................................................................................................................... app.staging.jiminny.com \n Maintenance Mode ............................................................................................................................. OFF \n Timezone ..................................................................................................................................... UTC \n Locale ..................................................................................................................................... en_US \n\n Cache ............................................................................................................................................ \n Config .................................................................................................................................... CACHED \n Events ................................................................................................................................ NOT CACHED \n Routes .................................................................................................................................... CACHED \n Views ..................................................................................................................................... CACHED \n\n Drivers .......................................................................................................................................... \n Broadcasting .............................................................................................................................. pusher \n Cache ...................................................................................................................................... redis \n Database ................................................................................................................................... mysql \n Logs .................................................................................................................................... errorlog \n Mail ......................................................................................................................................... ses \n Queue ........................................................................................................................................ sqs \n Session .................................................................................................................................... redis \n\n Storage .......................................................................................................................................... \n public/storage ........................................................................................................................ NOT LINKED \n\n Sentry ........................................................................................................................................... \n Enabled ...................................................................................................................................... YES \n Environment .............................................................................................................................. staging \n Laravel SDK Version ....................................................................................................................... 4.13.0 \n PHP SDK Version ........................................................................................................................... 4.13.0 \n Release ................................................................................................................................... 869720 \n Sample Rate Errors .......................................................................................................................... 100% \n Sample Rate Performance Monitoring ....................................................................................................... NOT SET \n Sample Rate Profiling .................................................................................................................... NOT SET \n Send Default PII ........................................................................................................................ DISABLED \n\nroot@fee51d2e1f17:/home/jiminny# php artisan automated-reports\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Started {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Found 2 daily reports to process {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"fa7417aa-538e-49ab-8827-77235637a6f9\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"63e6d70b-b7cb-4dfa-8443-53453e6c4054\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\n[2026-04-14 07:48:51] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"4c37ea47-eebd-4122-8c35-9d6b9d707beb\",\"trace_id\":\"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81\"}\n\nroot@fee51d2e1f17:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@73b64f5d54a3:/home/jiminny# php artisan automated-reports\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Started {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Found 3 daily reports to process {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"fa7417aa-538e-49ab-8827-77235637a6f9\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:03] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"63e6d70b-b7cb-4dfa-8443-53453e6c4054\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:04] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"7e7846e2-c0ea-4040-88f4-0ae14b66ade8\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\n[2026-04-14 08:41:04] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"c858e03f-62bd-462d-add2-c1e12a4c4cf8\",\"trace_id\":\"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f\"}\n\nroot@73b64f5d54a3:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@c78a087b1345:/home/jiminny# php artisan automated-reports\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Started {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Found 3 daily reports to process {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"fa7417aa-538e-49ab-8827-77235637a6f9\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"63e6d70b-b7cb-4dfa-8443-53453e6c4054\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"7e7846e2-c0ea-4040-88f4-0ae14b66ade8\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\n[2026-04-14 10:46:08] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"5c23e861-2ca9-4f92-9f67-773d6bc80ca0\",\"trace_id\":\"185df6f6-4327-4609-9c2e-2ab83a0f5432\"}\n\nroot@c78a087b1345:/home/jiminny# php artisan automated-reports --report-id 35\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Started {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[automated-reports] Automated report found Test 6\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Found 1 daily reports to process {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"7e7846e2-c0ea-4040-88f4-0ae14b66ade8\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\n[2026-04-14 10:48:42] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"246a1a1a-7076-458c-bd7d-49d2f5a2db88\",\"trace_id\":\"1f894bf6-e50d-4e99-b635-2aa52627fc27\"}\n\nroot@c78a087b1345:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@b79a4bdd6905:/home/jiminny# php artisan automated-reports --report-id 71b8bbf5-23f4-41df-b637-693765e7aa78\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Started {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Checking conditions {\"isMonday\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[automated-reports] Automated report found Tuesday report\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Found 1 daily reports to process {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"71b8bbf5-23f4-41df-b637-693765e7aa78\",\"teamId\":1,\"frequency\":\"daily\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\n[2026-04-14 11:22:33] staging.INFO: [automated-reports] Completed {\"correlation_id\":\"90a98201-fc6a-45b9-b3bd-2055cfce711b\",\"trace_id\":\"8e05a574-88d0-4475-acd0-86c51b5659a5\"}\n\nroot@b79a4bdd6905:/home/jiminny# php artisan automated-reports:send\nroot@b79a4bdd6905:/home/jiminny# php artisan tinker\nPsy Shell v0.12.21 (PHP 8.3.30 — cli) by Justin Hileman\nNew PHP manual is available (latest: 3.0.5). Update with `doc --update-manual`\n> $repo = app(AutomatedReportsRepository::class);\n[!] Aliasing 'AutomatedReportsRepository' to 'Jiminny\\Repositories\\AutomatedReportsRepository' for this Tinker session.\n= Jiminny\\Repositories\\AutomatedReportsRepository {#15215}\n\n> $repo->getGeneratedNotSentResults();\n= Illuminate\\Database\\Eloquent\\Collection {#15683\n all: [\n Jiminny\\Models\\AutomatedReportResult {#15703\n id: 14,\n uuid: b\"C^Ð>!€]¢ª1vàý\\x1F6Ï\",\n report_id: 8,\n name: \"Exec Summary - 5 Sep 2024 - 10 Mar 2026 - All\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"team_id\":1,\"request_id\":\"21805da2-d03e-435e-aa31-76e0fd1f36cf\",\"report_type\":\"exec_summary\",\"media_types\":[\"pdf\",\"podcast\"],\"from_date\":\"2024-09-05T00:00:00+00:00\",\"to_date\":\"2026-03-10T23:59:59+00:00\",\"group_ids\":[],\"call_deal_stage\":[],\"current_deal_stage\":[],\"deal_min_value\":null,\"deal_max_value\":null,\"call_types\":[\"conference\",\"dialer\"],\"call_duration_min_seconds\":null,\"call_duration_max_seconds\":null,\"special_requirements\":\"\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"5 Sep 2024 - 10 Mar 2026\",\"playbook_categories\":[],\"custom_name\":null}\",\n response: \"{\"request_id\":\"21805da2-d03e-435e-aa31-76e0fd1f36cf\",\"status\":\"completed\",\"timestamp\":\"2026-03-26T14:10:58.983895+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf.MD\",\"report_type\":\"exec_summary\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf.pdf\",\"podcast_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.txt\",\"podcast_audio_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.mp3\",\"podcast_ssml_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/reports\\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.ssml\"}\",\n requested_at: \"2026-03-26 14:06:35\",\n generated_at: \"2026-03-26 14:10:59\",\n sent_at: null,\n created_at: \"2026-03-26 14:06:35\",\n updated_at: \"2026-03-26 14:10:59\",\n report: Jiminny\\Models\\AutomatedReport {#15197\n id: 8,\n #uuid: b\"FWNçôý\\x1Dªš–+âga”d\",\n team_id: 1,\n type: \"exec_summary\",\n status: 1,\n frequency: \"one_off\",\n from: \"2024-09-05 00:00:00\",\n to: \"2026-03-10 00:00:00\",\n deal_value_min: null,\n deal_value_max: null,\n call_types: \"[\"conference\",\"dialer\"]\",\n media_types: \"[\"pdf\",\"podcast\"]\",\n call_duration_min: null,\n call_duration_max: null,\n groups: \"[]\",\n playbook_categories: \"[]\",\n deal_at_call_stages: \"[]\",\n current_deal_stages: \"[]\",\n recipients: \"{\"users\":[]}\",\n jiminny_recipients: \"{\"users\":[]}\",\n additional_prompt_input: \"\",\n custom_name: null,\n activity_search_id: null,\n ask_anything_prompt_id: null,\n expires_at: null,\n created_by: 3248,\n created_at: \"2026-03-26 14:06:32\",\n updated_at: \"2026-03-26 14:06:32\",\n deleted_at: null,\n },\n },\n Jiminny\\Models\\AutomatedReportResult {#15701\n id: 43,\n uuid: b\"GJ—\\x14?§ÄÉøN_0A}Ý\",\n report_id: 33,\n name: \"Ask Jiminny test report - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"test\",\"call_ids\":[\"54964443\",\"54964442\",\"54214348\",\"54747783\",\"54792639\",\"54355211\",\"54214356\",\"54214362\",\"54373257\",\"54276602\",\"54547166\",\"54357434\",\"54638437\",\"54439335\",\"54184628\",\"54435911\",\"54547029\",\"54580912\",\"54314274\",\"53918272\",\"54447612\",\"54561308\",\"52175046\",\"54531535\",\"54495620\",\"52753147\",\"52175055\",\"54358692\",\"54020412\",\"54424068\",\"54222599\",\"53852885\",\"52697526\",\"53944212\",\"54222051\",\"54125650\",\"54284918\",\"54137014\",\"54142985\",\"53755346\",\"54078231\",\"52175067\",\"54021634\",\"53971125\",\"54077453\",\"54010996\",\"52759195\",\"53028445\",\"54065927\",\"52175082\",\"53920744\",\"54020314\",\"52714861\",\"53765213\",\"53926207\",\"52175042\",\"52948707\",\"53602066\",\"53824355\",\"53769276\",\"53048081\",\"52263045\",\"52564798\",\"53604424\",\"53575428\",\"52167221\",\"53545307\",\"53545088\",\"53606423\",\"52956249\",\"52894249\",\"52568574\",\"52527230\",\"53058889\",\"52760234\",\"52263048\",\"52451159\",\"52175073\",\"52358247\",\"52189687\",\"52232025\",\"51980465\",\"52430474\",\"52363300\",\"52346694\",\"52359342\",\"52231503\",\"52255239\",\"50934254\",\"52303651\",\"52258169\",\"51958927\",\"52242714\",\"52239097\",\"52083853\",\"52083904\",\"51765719\",\"52072580\",\"51525359\",\"51806803\"],\"team_id\":1,\"request_id\":\"3fa7c4c9-9714-474a-adf8-4e5f30417ddd\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Ask Jiminny test report\"}\",\n response: \"{\"request_id\":\"3fa7c4c9-9714-474a-adf8-4e5f30417ddd\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T07:49:35.099004+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/3fa7c4c9-9714-474a-adf8-4e5f30417ddd.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/3fa7c4c9-9714-474a-adf8-4e5f30417ddd.pdf\"}\",\n requested_at: \"2026-04-14 07:49:04\",\n generated_at: \"2026-04-14 07:49:35\",\n sent_at: null,\n created_at: \"2026-04-14 07:49:03\",\n updated_at: \"2026-04-14 07:49:35\",\n report: Jiminny\\Models\\AutomatedReport {#15196\n id: 33,\n #uuid: b\"I«SŽút\\x17ªˆ'w#V7¦ù\",\n team_id: 1,\n type: \"ask_jiminny\",\n status: 1,\n frequency: \"daily\",\n from: null,\n to: null,\n deal_value_min: null,\n deal_value_max: null,\n call_types: \"[]\",\n media_types: \"[\"pdf\"]\",\n call_duration_min: null,\n call_duration_max: null,\n groups: \"[9]\",\n playbook_categories: null,\n deal_at_call_stages: null,\n current_deal_stages: null,\n recipients: \"{\"users\":[7160,23309]}\",\n jiminny_recipients: null,\n additional_prompt_input: null,\n custom_name: \"Ask Jiminny test report\",\n activity_search_id: 26912,\n ask_anything_prompt_id: 62,\n expires_at: \"2026-04-30\",\n created_by: 7160,\n created_at: \"2026-04-08 10:12:30\",\n updated_at: \"2026-04-08 10:12:30\",\n deleted_at: null,\n },\n },\n Jiminny\\Models\\AutomatedReportResult {#15700\n id: 45,\n uuid: b\"A¢•M8z~‚*l\\x01÷ð\\0s\",\n report_id: 33,\n name: \"Ask Jiminny test report - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"test\",\"call_ids\":[\"54964443\",\"54964442\",\"54214348\",\"54747783\",\"54792639\",\"54355211\",\"54214356\",\"54214362\",\"54373257\",\"54276602\",\"54547166\",\"54357434\",\"54638437\",\"54439335\",\"54184628\",\"54435911\",\"54547029\",\"54580912\",\"54314274\",\"53918272\",\"54447612\",\"54561308\",\"52175046\",\"54531535\",\"54495620\",\"52753147\",\"52175055\",\"54358692\",\"54020412\",\"54424068\",\"54222599\",\"53852885\",\"52697526\",\"53944212\",\"54222051\",\"54125650\",\"54284918\",\"54137014\",\"54142985\",\"53755346\",\"54078231\",\"52175067\",\"54021634\",\"53971125\",\"54077453\",\"54010996\",\"52759195\",\"53028445\",\"54065927\",\"52175082\",\"53920744\",\"54020314\",\"52714861\",\"53765213\",\"53926207\",\"52175042\",\"52948707\",\"53602066\",\"53824355\",\"53769276\",\"53048081\",\"52263045\",\"52564798\",\"53604424\",\"53575428\",\"52167221\",\"53545307\",\"53545088\",\"53606423\",\"52956249\",\"52894249\",\"52568574\",\"52527230\",\"53058889\",\"52760234\",\"52263048\",\"52451159\",\"52175073\",\"52358247\",\"52189687\",\"52232025\",\"51980465\",\"52430474\",\"52363300\",\"52346694\",\"52359342\",\"52231503\",\"52255239\",\"50934254\",\"52303651\",\"52258169\",\"51958927\",\"52242714\",\"52239097\",\"52083853\",\"52083904\",\"51765719\",\"52072580\",\"51525359\",\"51806803\"],\"team_id\":1,\"request_id\":\"38817a7e-954d-41a2-822a-6c01f7f00073\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Ask Jiminny test report\"}\",\n response: \"{\"request_id\":\"38817a7e-954d-41a2-822a-6c01f7f00073\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T08:41:46.594895+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/38817a7e-954d-41a2-822a-6c01f7f00073.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/38817a7e-954d-41a2-822a-6c01f7f00073.pdf\"}\",\n requested_at: \"2026-04-14 08:41:11\",\n generated_at: \"2026-04-14 08:41:46\",\n sent_at: null,\n created_at: \"2026-04-14 08:41:11\",\n updated_at: \"2026-04-14 08:41:46\",\n report: Jiminny\\Models\\AutomatedReport {#15196},\n },\n Jiminny\\Models\\AutomatedReportResult {#15705\n id: 47,\n uuid: b\"D‘\\x10[̘^–𔹧-ÞÝB\",\n report_id: 33,\n name: \"Ask Jiminny test report - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"test\",\"call_ids\":[\"54964443\",\"54964442\",\"54214348\",\"54747783\",\"54792639\",\"54355211\",\"54214356\",\"54214362\",\"54373257\",\"54276602\",\"54547166\",\"54357434\",\"54638437\",\"54439335\",\"54184628\",\"54435911\",\"54547029\",\"54580912\",\"54314274\",\"53918272\",\"54447612\",\"54561308\",\"52175046\",\"54531535\",\"54495620\",\"52753147\",\"52175055\",\"54358692\",\"54020412\",\"54424068\",\"54222599\",\"53852885\",\"52697526\",\"53944212\",\"54222051\",\"54125650\",\"54284918\",\"54137014\",\"54142985\",\"53755346\",\"54078231\",\"52175067\",\"54021634\",\"53971125\",\"54077453\",\"54010996\",\"52759195\",\"53028445\",\"54065927\",\"52175082\",\"53920744\",\"54020314\",\"52714861\",\"53765213\",\"53926207\",\"52175042\",\"52948707\",\"53602066\",\"53824355\",\"53769276\",\"53048081\",\"52263045\",\"52564798\",\"53604424\",\"53575428\",\"52167221\",\"53545307\",\"53545088\",\"53606423\",\"52956249\",\"52894249\",\"52568574\",\"52527230\",\"53058889\",\"52760234\",\"52263048\",\"52451159\",\"52175073\",\"52358247\",\"52189687\",\"52232025\",\"51980465\",\"52430474\",\"52363300\",\"52346694\",\"52359342\",\"52231503\",\"52255239\",\"50934254\",\"52303651\",\"52258169\",\"51958927\",\"52242714\",\"52239097\",\"52083853\",\"52083904\",\"51765719\",\"52072580\",\"51525359\",\"51806803\"],\"team_id\":1,\"request_id\":\"cc985e96-105b-4491-9a94-b9a72ddedd42\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Ask Jiminny test report\"}\",\n response: \"{\"request_id\":\"cc985e96-105b-4491-9a94-b9a72ddedd42\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T10:46:38.602513+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/cc985e96-105b-4491-9a94-b9a72ddedd42.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/cc985e96-105b-4491-9a94-b9a72ddedd42.pdf\"}\",\n requested_at: \"2026-04-14 10:46:09\",\n generated_at: \"2026-04-14 10:46:38\",\n sent_at: null,\n created_at: \"2026-04-14 10:46:08\",\n updated_at: \"2026-04-14 10:46:38\",\n report: Jiminny\\Models\\AutomatedReport {#15196},\n },\n Jiminny\\Models\\AutomatedReportResult {#15687\n id: 49,\n uuid: b\"K·Ì¬Ò\\vþþ«PÈ»‰\\x19™s\",\n report_id: 35,\n name: \"Test 6 - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"Please make a summary for all calls\",\"call_ids\":[\"49880280\",\"49104686\",\"48360159\",\"47193308\",\"44762288\",\"43862984\",\"41678335\",\"41310991\",\"39940631\",\"39779620\",\"39389894\",\"39106205\",\"38745110\",\"38510502\"],\"team_id\":1,\"request_id\":\"d20bfefe-ccac-4bb7-ab50-c8bb89199973\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Test 6\"}\",\n response: \"{\"request_id\":\"d20bfefe-ccac-4bb7-ab50-c8bb89199973\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T10:46:37.905336+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/d20bfefe-ccac-4bb7-ab50-c8bb89199973.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/d20bfefe-ccac-4bb7-ab50-c8bb89199973.pdf\"}\",\n requested_at: \"2026-04-14 10:46:16\",\n generated_at: \"2026-04-14 10:46:37\",\n sent_at: null,\n created_at: \"2026-04-14 10:46:16\",\n updated_at: \"2026-04-14 10:46:38\",\n report: Jiminny\\Models\\AutomatedReport {#15219\n id: 35,\n #uuid: b\"\"\"\n @@Àê~xFâˆô\\n\n áKfè\n \"\"\",\n team_id: 1,\n type: \"ask_jiminny\",\n status: 1,\n frequency: \"daily\",\n from: null,\n to: null,\n deal_value_min: null,\n deal_value_max: null,\n call_types: \"[]\",\n media_types: \"[\"pdf\"]\",\n call_duration_min: null,\n call_duration_max: null,\n groups: \"[9]\",\n playbook_categories: null,\n deal_at_call_stages: null,\n current_deal_stages: null,\n recipients: \"{\"users\":[3248,23559]}\",\n jiminny_recipients: null,\n additional_prompt_input: null,\n custom_name: \"Test 6\",\n activity_search_id: 10932,\n ask_anything_prompt_id: 65,\n expires_at: \"2026-04-19\",\n created_by: 3248,\n created_at: \"2026-04-14 08:39:14\",\n updated_at: \"2026-04-14 08:39:14\",\n deleted_at: null,\n },\n },\n Jiminny\\Models\\AutomatedReportResult {#15686\n id: 50,\n uuid: b\"GÙµ‚\\{3‡p©ú1ÿÖŽ\",\n report_id: 35,\n name: \"Test 6 - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"Please make a summary for all calls\",\"call_ids\":[\"49880280\",\"49104686\",\"48360159\",\"47193308\",\"44762288\",\"43862984\",\"41678335\",\"41310991\",\"39940631\",\"39779620\",\"39389894\",\"39106205\",\"38745110\",\"38510502\"],\"team_id\":1,\"request_id\":\"5c9d7b33-b582-47d9-8770-a9fa31ffd68d\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Test 6\"}\",\n response: \"{\"request_id\":\"5c9d7b33-b582-47d9-8770-a9fa31ffd68d\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T10:49:01.677577+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/5c9d7b33-b582-47d9-8770-a9fa31ffd68d.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/5c9d7b33-b582-47d9-8770-a9fa31ffd68d.pdf\"}\",\n requested_at: \"2026-04-14 10:48:43\",\n generated_at: \"2026-04-14 10:49:01\",\n sent_at: null,\n created_at: \"2026-04-14 10:48:42\",\n updated_at: \"2026-04-14 10:49:01\",\n report: Jiminny\\Models\\AutomatedReport {#15219},\n },\n Jiminny\\Models\\AutomatedReportResult {#15685\n id: 51,\n uuid: b\"L\\x13HSÏÖ»™ŸŽ¦¯Cár{\",\n report_id: 36,\n name: \"Tuesday report - 13 Apr 2026\",\n media_type: \"pdf\",\n parent_id: null,\n status: 2,\n reason: 0,\n payload: \"{\"user_question\":\"test\",\"call_ids\":[\"54214348\",\"54747783\",\"54792639\",\"54355211\",\"54214356\",\"54579532\",\"54214362\",\"54795501\",\"54373257\",\"54566775\",\"54179068\",\"54691680\",\"54702966\",\"54186485\",\"54547166\",\"54357434\",\"54439335\",\"54435911\",\"54547029\",\"54179299\",\"54580912\",\"54314274\",\"53918272\",\"54310744\",\"54447612\",\"54561308\",\"52175046\",\"54531535\",\"54495620\",\"52753147\",\"53853301\",\"52551697\",\"52175055\",\"54358692\",\"54020412\",\"54424068\",\"54222599\",\"53853298\",\"53852885\",\"53931221\",\"54132327\",\"53944212\",\"54037186\",\"54125650\",\"54059512\",\"53801108\",\"54284918\",\"52552430\",\"54142985\",\"53755346\",\"52175067\",\"54021634\",\"52896288\",\"52175051\",\"54077453\",\"52413114\",\"54010996\",\"53528248\",\"54078291\",\"53813598\",\"54076266\",\"53028445\",\"54065927\",\"53922780\",\"53729434\",\"53919824\",\"53384442\",\"52175082\",\"53920744\",\"54020314\",\"52714861\",\"54009217\",\"53765213\",\"53926207\",\"52175042\",\"52948707\",\"53602066\",\"53824355\",\"53769276\",\"53048081\",\"53769369\",\"53384450\",\"52161199\",\"52263045\",\"52564798\",\"50907426\",\"53604424\",\"53575428\",\"52167221\",\"52156369\",\"53545307\",\"52565625\",\"53610225\",\"53594648\",\"53545088\",\"52175041\",\"52956249\",\"52217425\",\"52562272\",\"52248293\"],\"team_id\":1,\"request_id\":\"cfd6bb99-4853-4c13-9f8e-a6af43e1727b\",\"callback_url\":\"https:\\/\\/team:5hgTDUyu1vqCd@app.staging.jiminny.com\\/webhook\\/reports\\/ready\",\"report_period\":\"13 Apr 2026\",\"report_name\":\"Tuesday report\"}\",\n response: \"{\"request_id\":\"cfd6bb99-4853-4c13-9f8e-a6af43e1727b\",\"status\":\"completed\",\"timestamp\":\"2026-04-14T11:23:03.951289+00:00\",\"s3_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/cfd6bb99-4853-4c13-9f8e-a6af43e1727b.MD\",\"pdf_url\":\"s3:\\/\\/stage.jiminny.client-data\\/5f0f4810-7e77-4086-8f69-93429ae4d70b\\/panorama-reports\\/cfd6bb99-4853-4c13-9f8e-a6af43e1727b.pdf\"}\",\n requested_at: \"2026-04-14 11:22:36\",\n generated_at: \"2026-04-14 11:23:04\",\n sent_at: null,\n created_at: \"2026-04-14 11:22:36\",\n updated_at: \"2026-04-14 11:23:04\",\n report: Jiminny\\Models\\AutomatedReport {#15221\n id: 36,\n #uuid: b\"Aß#ôq¸»õ¶7i7eçªx\",\n team_id: 1,\n type: \"ask_jiminny\",\n status: 1,\n frequency: \"daily\",\n from: null,\n to: null,\n deal_value_min: null,\n deal_value_max: null,\n call_types: \"[]\",\n media_types: \"[\"pdf\"]\",\n call_duration_min: null,\n call_duration_max: null,\n groups: \"[]\",\n playbook_categories: null,\n deal_at_call_stages: null,\n current_deal_stages: null,\n recipients: \"{\"users\":[7160]}\",\n jiminny_recipients: null,\n additional_prompt_input: null,\n custom_name: \"Tuesday report\",\n activity_search_id: 26913,\n ask_anything_prompt_id: 62,\n expires_at: \"2026-04-30\",\n created_by: 7160,\n created_at: \"2026-04-14 11:20:20\",\n updated_at: \"2026-04-14 11:20:20\",\n deleted_at: null,\n },\n },\n ],\n }\n\n> $repo->getGeneratedNotSentResults()->count();\n= 7\n\n> exit\n\n INFO Goodbye.\n\nroot@b79a4bdd6905:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@d1ac6fe11762:/home/jiminny#","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.23320313,"top":1.0,"width":0.06914063,"height":-0.03680551},"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.23554687,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (docker)","depth":2,"bounds":{"left":0.30234376,"top":1.0,"width":0.06914063,"height":-0.03680551},"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.3046875,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.37148437,"top":1.0,"width":0.06914063,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.3738281,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-93-249:~ (nc)","depth":2,"bounds":{"left":0.440625,"top":1.0,"width":0.06914063,"height":-0.03680551},"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.44296876,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5097656,"top":1.0,"width":0.06914063,"height":-0.03680551},"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.5121094,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.57890624,"top":1.0,"width":0.06914063,"height":-0.03680551},"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.58125,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.64804685,"top":1.0,"width":0.06914063,"height":-0.03680551},"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.6503906,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Unable to access screenpipe activity data (claude)","depth":2,"bounds":{"left":0.7171875,"top":1.0,"width":0.06914063,"height":-0.03680551},"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.71953124,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7703125,"top":1.0,"width":0.021875,"height":-0.02013886},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ec2-user@ip-10-30-93-249:~","depth":1,"bounds":{"left":0.475,"top":1.0,"width":0.07851563,"height":-0.020833373},"role_description":"text"}]...
|
8800811553733242264
|
-5261720347317964283
|
click
|
accessibility
|
NULL
|
Last login: Sat Apr 11 12:38:35 on ttys007
Poetry Last login: Sat Apr 11 12:38:35 on ttys007
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ vstg
Warning: Permanently added 'jiminny-stage-ecs1' (ED25519) to the list of known hosts.
A newer 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 info
, #_
~\_ ####_
~~ \_#####\
~~ \###|
~~ \#/ ___ Amazon Linux 2023 (ECS Optimized)
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
For documentation, visit [URL_WITH_CREDENTIALS] php artisan automated-reports
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Started {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Found 2 daily reports to process {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"fa7417aa-538e-49ab-8827-77235637a6f9","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"63e6d70b-b7cb-4dfa-8443-53453e6c4054","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
[2026-04-14 07:48:51] staging.INFO: [automated-reports] Completed {"correlation_id":"4c37ea47-eebd-4122-8c35-9d6b9d707beb","trace_id":"bfe6b131-e3ad-4cfc-8954-5fb1ecfded81"}
root@fee51d2e1f17:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@73b64f5d54a3:/home/jiminny# php artisan automated-reports
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Started {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Found 3 daily reports to process {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"fa7417aa-538e-49ab-8827-77235637a6f9","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:03] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"63e6d70b-b7cb-4dfa-8443-53453e6c4054","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:04] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"7e7846e2-c0ea-4040-88f4-0ae14b66ade8","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
[2026-04-14 08:41:04] staging.INFO: [automated-reports] Completed {"correlation_id":"c858e03f-62bd-462d-add2-c1e12a4c4cf8","trace_id":"94b4fdcc-f609-42e7-b5b7-b6abfc67e02f"}
root@73b64f5d54a3:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@c78a087b1345:/home/jiminny# php artisan automated-reports
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Started {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Found 3 daily reports to process {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"fa7417aa-538e-49ab-8827-77235637a6f9","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"63e6d70b-b7cb-4dfa-8443-53453e6c4054","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"7e7846e2-c0ea-4040-88f4-0ae14b66ade8","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
[2026-04-14 10:46:08] staging.INFO: [automated-reports] Completed {"correlation_id":"5c23e861-2ca9-4f92-9f67-773d6bc80ca0","trace_id":"185df6f6-4327-4609-9c2e-2ab83a0f5432"}
root@c78a087b1345:/home/jiminny# php artisan automated-reports --report-id 35
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Started {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[automated-reports] Automated report found Test 6
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Found 1 daily reports to process {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"7e7846e2-c0ea-4040-88f4-0ae14b66ade8","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
[2026-04-14 10:48:42] staging.INFO: [automated-reports] Completed {"correlation_id":"246a1a1a-7076-458c-bd7d-49d2f5a2db88","trace_id":"1f894bf6-e50d-4e99-b635-2aa52627fc27"}
root@c78a087b1345:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@b79a4bdd6905:/home/jiminny# php artisan automated-reports --report-id 71b8bbf5-23f4-41df-b637-693765e7aa78
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Started {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Checking conditions {"isMonday":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Processing daily reports {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[automated-reports] Automated report found Tuesday report
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Found 1 daily reports to process {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"71b8bbf5-23f4-41df-b637-693765e7aa78","teamId":1,"frequency":"daily","type":"ask_jiminny"} {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
[2026-04-14 11:22:33] staging.INFO: [automated-reports] Completed {"correlation_id":"90a98201-fc6a-45b9-b3bd-2055cfce711b","trace_id":"8e05a574-88d0-4475-acd0-86c51b5659a5"}
root@b79a4bdd6905:/home/jiminny# php artisan automated-reports:send
root@b79a4bdd6905:/home/jiminny# php artisan tinker
Psy Shell v0.12.21 (PHP 8.3.30 — cli) by Justin Hileman
New PHP manual is available (latest: 3.0.5). Update with `doc --update-manual`
> $repo = app(AutomatedReportsRepository::class);
[!] Aliasing 'AutomatedReportsRepository' to 'Jiminny\Repositories\AutomatedReportsRepository' for this Tinker session.
= Jiminny\Repositories\AutomatedReportsRepository {#15215}
> $repo->getGeneratedNotSentResults();
= Illuminate\Database\Eloquent\Collection {#15683
all: [
Jiminny\Models\AutomatedReportResult {#15703
id: 14,
uuid: b"C^Ð>!€]¢ª1vàý\x1F6Ï",
report_id: 8,
name: "Exec Summary - 5 Sep 2024 - 10 Mar 2026 - All",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"team_id":1,"request_id":"21805da2-d03e-435e-aa31-76e0fd1f36cf","report_type":"exec_summary","media_types":["pdf","podcast"],"from_date":"2024-09-05T00:00:00+00:00","to_date":"2026-03-10T23:59:59+00:00","group_ids":[],"call_deal_stage":[],"current_deal_stage":[],"deal_min_value":null,"deal_max_value":null,"call_types":["conference","dialer"],"call_duration_min_seconds":null,"call_duration_max_seconds":null,"special_requirements":"","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"5 Sep 2024 - 10 Mar 2026","playbook_categories":[],"custom_name":null}",
response: "{"request_id":"21805da2-d03e-435e-aa31-76e0fd1f36cf","status":"completed","timestamp":"2026-03-26T14:10:58.983895+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf.MD","report_type":"exec_summary","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf.pdf","podcast_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.txt","podcast_audio_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.mp3","podcast_ssml_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/reports\/21805da2-d03e-435e-aa31-76e0fd1f36cf_podcast.ssml"}",
requested_at: "2026-03-26 14:06:35",
generated_at: "2026-03-26 14:10:59",
sent_at: null,
created_at: "2026-03-26 14:06:35",
updated_at: "2026-03-26 14:10:59",
report: Jiminny\Models\AutomatedReport {#15197
id: 8,
#uuid: b"FWNçôý\x1Dªš–+âga”d",
team_id: 1,
type: "exec_summary",
status: 1,
frequency: "one_off",
from: "2024-09-05 00:00:00",
to: "2026-03-10 00:00:00",
deal_value_min: null,
deal_value_max: null,
call_types: "["conference","dialer"]",
media_types: "["pdf","podcast"]",
call_duration_min: null,
call_duration_max: null,
groups: "[]",
playbook_categories: "[]",
deal_at_call_stages: "[]",
current_deal_stages: "[]",
recipients: "{"users":[]}",
jiminny_recipients: "{"users":[]}",
additional_prompt_input: "",
custom_name: null,
activity_search_id: null,
ask_anything_prompt_id: null,
expires_at: null,
created_by: 3248,
created_at: "2026-03-26 14:06:32",
updated_at: "2026-03-26 14:06:32",
deleted_at: null,
},
},
Jiminny\Models\AutomatedReportResult {#15701
id: 43,
uuid: b"GJ—\x14?§ÄÉøN_0A}Ý",
report_id: 33,
name: "Ask Jiminny test report - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"test","call_ids":["54964443","54964442","54214348","54747783","54792639","54355211","54214356","54214362","54373257","54276602","54547166","54357434","54638437","54439335","54184628","54435911","54547029","54580912","54314274","53918272","54447612","54561308","52175046","54531535","54495620","52753147","52175055","54358692","54020412","54424068","54222599","53852885","52697526","53944212","54222051","54125650","54284918","54137014","54142985","53755346","54078231","52175067","54021634","53971125","54077453","54010996","52759195","53028445","54065927","52175082","53920744","54020314","52714861","53765213","53926207","52175042","52948707","53602066","53824355","53769276","53048081","52263045","52564798","53604424","53575428","52167221","53545307","53545088","53606423","52956249","52894249","52568574","52527230","53058889","52760234","52263048","52451159","52175073","52358247","52189687","52232025","51980465","52430474","52363300","52346694","52359342","52231503","52255239","50934254","52303651","52258169","51958927","52242714","52239097","52083853","52083904","51765719","52072580","51525359","51806803"],"team_id":1,"request_id":"3fa7c4c9-9714-474a-adf8-4e5f30417ddd","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Ask Jiminny test report"}",
response: "{"request_id":"3fa7c4c9-9714-474a-adf8-4e5f30417ddd","status":"completed","timestamp":"2026-04-14T07:49:35.099004+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/3fa7c4c9-9714-474a-adf8-4e5f30417ddd.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/3fa7c4c9-9714-474a-adf8-4e5f30417ddd.pdf"}",
requested_at: "2026-04-14 07:49:04",
generated_at: "2026-04-14 07:49:35",
sent_at: null,
created_at: "2026-04-14 07:49:03",
updated_at: "2026-04-14 07:49:35",
report: Jiminny\Models\AutomatedReport {#15196
id: 33,
#uuid: b"I«SŽút\x17ªˆ'w#V7¦ù",
team_id: 1,
type: "ask_jiminny",
status: 1,
frequency: "daily",
from: null,
to: null,
deal_value_min: null,
deal_value_max: null,
call_types: "[]",
media_types: "["pdf"]",
call_duration_min: null,
call_duration_max: null,
groups: "[9]",
playbook_categories: null,
deal_at_call_stages: null,
current_deal_stages: null,
recipients: "{"users":[7160,23309]}",
jiminny_recipients: null,
additional_prompt_input: null,
custom_name: "Ask Jiminny test report",
activity_search_id: 26912,
ask_anything_prompt_id: 62,
expires_at: "2026-04-30",
created_by: 7160,
created_at: "2026-04-08 10:12:30",
updated_at: "2026-04-08 10:12:30",
deleted_at: null,
},
},
Jiminny\Models\AutomatedReportResult {#15700
id: 45,
uuid: b"A¢•M8z~‚*l\x01÷ð\0s",
report_id: 33,
name: "Ask Jiminny test report - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"test","call_ids":["54964443","54964442","54214348","54747783","54792639","54355211","54214356","54214362","54373257","54276602","54547166","54357434","54638437","54439335","54184628","54435911","54547029","54580912","54314274","53918272","54447612","54561308","52175046","54531535","54495620","52753147","52175055","54358692","54020412","54424068","54222599","53852885","52697526","53944212","54222051","54125650","54284918","54137014","54142985","53755346","54078231","52175067","54021634","53971125","54077453","54010996","52759195","53028445","54065927","52175082","53920744","54020314","52714861","53765213","53926207","52175042","52948707","53602066","53824355","53769276","53048081","52263045","52564798","53604424","53575428","52167221","53545307","53545088","53606423","52956249","52894249","52568574","52527230","53058889","52760234","52263048","52451159","52175073","52358247","52189687","52232025","51980465","52430474","52363300","52346694","52359342","52231503","52255239","50934254","52303651","52258169","51958927","52242714","52239097","52083853","52083904","51765719","52072580","51525359","51806803"],"team_id":1,"request_id":"38817a7e-954d-41a2-822a-6c01f7f00073","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Ask Jiminny test report"}",
response: "{"request_id":"38817a7e-954d-41a2-822a-6c01f7f00073","status":"completed","timestamp":"2026-04-14T08:41:46.594895+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/38817a7e-954d-41a2-822a-6c01f7f00073.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/38817a7e-954d-41a2-822a-6c01f7f00073.pdf"}",
requested_at: "2026-04-14 08:41:11",
generated_at: "2026-04-14 08:41:46",
sent_at: null,
created_at: "2026-04-14 08:41:11",
updated_at: "2026-04-14 08:41:46",
report: Jiminny\Models\AutomatedReport {#15196},
},
Jiminny\Models\AutomatedReportResult {#15705
id: 47,
uuid: b"D‘\x10[̘^–𔹧-ÞÝB",
report_id: 33,
name: "Ask Jiminny test report - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"test","call_ids":["54964443","54964442","54214348","54747783","54792639","54355211","54214356","54214362","54373257","54276602","54547166","54357434","54638437","54439335","54184628","54435911","54547029","54580912","54314274","53918272","54447612","54561308","52175046","54531535","54495620","52753147","52175055","54358692","54020412","54424068","54222599","53852885","52697526","53944212","54222051","54125650","54284918","54137014","54142985","53755346","54078231","52175067","54021634","53971125","54077453","54010996","52759195","53028445","54065927","52175082","53920744","54020314","52714861","53765213","53926207","52175042","52948707","53602066","53824355","53769276","53048081","52263045","52564798","53604424","53575428","52167221","53545307","53545088","53606423","52956249","52894249","52568574","52527230","53058889","52760234","52263048","52451159","52175073","52358247","52189687","52232025","51980465","52430474","52363300","52346694","52359342","52231503","52255239","50934254","52303651","52258169","51958927","52242714","52239097","52083853","52083904","51765719","52072580","51525359","51806803"],"team_id":1,"request_id":"cc985e96-105b-4491-9a94-b9a72ddedd42","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Ask Jiminny test report"}",
response: "{"request_id":"cc985e96-105b-4491-9a94-b9a72ddedd42","status":"completed","timestamp":"2026-04-14T10:46:38.602513+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/cc985e96-105b-4491-9a94-b9a72ddedd42.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/cc985e96-105b-4491-9a94-b9a72ddedd42.pdf"}",
requested_at: "2026-04-14 10:46:09",
generated_at: "2026-04-14 10:46:38",
sent_at: null,
created_at: "2026-04-14 10:46:08",
updated_at: "2026-04-14 10:46:38",
report: Jiminny\Models\AutomatedReport {#15196},
},
Jiminny\Models\AutomatedReportResult {#15687
id: 49,
uuid: b"K·Ì¬Ò\vþþ«PÈ»‰\x19™s",
report_id: 35,
name: "Test 6 - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"Please make a summary for all calls","call_ids":["49880280","49104686","48360159","47193308","44762288","43862984","41678335","41310991","39940631","39779620","39389894","39106205","38745110","38510502"],"team_id":1,"request_id":"d20bfefe-ccac-4bb7-ab50-c8bb89199973","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Test 6"}",
response: "{"request_id":"d20bfefe-ccac-4bb7-ab50-c8bb89199973","status":"completed","timestamp":"2026-04-14T10:46:37.905336+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/d20bfefe-ccac-4bb7-ab50-c8bb89199973.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/d20bfefe-ccac-4bb7-ab50-c8bb89199973.pdf"}",
requested_at: "2026-04-14 10:46:16",
generated_at: "2026-04-14 10:46:37",
sent_at: null,
created_at: "2026-04-14 10:46:16",
updated_at: "2026-04-14 10:46:38",
report: Jiminny\Models\AutomatedReport {#15219
id: 35,
#uuid: b"""
@@Àê~xFâˆô\n
áKfè
""",
team_id: 1,
type: "ask_jiminny",
status: 1,
frequency: "daily",
from: null,
to: null,
deal_value_min: null,
deal_value_max: null,
call_types: "[]",
media_types: "["pdf"]",
call_duration_min: null,
call_duration_max: null,
groups: "[9]",
playbook_categories: null,
deal_at_call_stages: null,
current_deal_stages: null,
recipients: "{"users":[3248,23559]}",
jiminny_recipients: null,
additional_prompt_input: null,
custom_name: "Test 6",
activity_search_id: 10932,
ask_anything_prompt_id: 65,
expires_at: "2026-04-19",
created_by: 3248,
created_at: "2026-04-14 08:39:14",
updated_at: "2026-04-14 08:39:14",
deleted_at: null,
},
},
Jiminny\Models\AutomatedReportResult {#15686
id: 50,
uuid: b"GÙµ‚\{3‡p©ú1ÿÖŽ",
report_id: 35,
name: "Test 6 - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"Please make a summary for all calls","call_ids":["49880280","49104686","48360159","47193308","44762288","43862984","41678335","41310991","39940631","39779620","39389894","39106205","38745110","38510502"],"team_id":1,"request_id":"5c9d7b33-b582-47d9-8770-a9fa31ffd68d","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Test 6"}",
response: "{"request_id":"5c9d7b33-b582-47d9-8770-a9fa31ffd68d","status":"completed","timestamp":"2026-04-14T10:49:01.677577+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/5c9d7b33-b582-47d9-8770-a9fa31ffd68d.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/5c9d7b33-b582-47d9-8770-a9fa31ffd68d.pdf"}",
requested_at: "2026-04-14 10:48:43",
generated_at: "2026-04-14 10:49:01",
sent_at: null,
created_at: "2026-04-14 10:48:42",
updated_at: "2026-04-14 10:49:01",
report: Jiminny\Models\AutomatedReport {#15219},
},
Jiminny\Models\AutomatedReportResult {#15685
id: 51,
uuid: b"L\x13HSÏÖ»™ŸŽ¦¯Cár{",
report_id: 36,
name: "Tuesday report - 13 Apr 2026",
media_type: "pdf",
parent_id: null,
status: 2,
reason: 0,
payload: "{"user_question":"test","call_ids":["54214348","54747783","54792639","54355211","54214356","54579532","54214362","54795501","54373257","54566775","54179068","54691680","54702966","54186485","54547166","54357434","54439335","54435911","54547029","54179299","54580912","54314274","53918272","54310744","54447612","54561308","52175046","54531535","54495620","52753147","53853301","52551697","52175055","54358692","54020412","54424068","54222599","53853298","53852885","53931221","54132327","53944212","54037186","54125650","54059512","53801108","54284918","52552430","54142985","53755346","52175067","54021634","52896288","52175051","54077453","52413114","54010996","53528248","54078291","53813598","54076266","53028445","54065927","53922780","53729434","53919824","53384442","52175082","53920744","54020314","52714861","54009217","53765213","53926207","52175042","52948707","53602066","53824355","53769276","53048081","53769369","53384450","52161199","52263045","52564798","50907426","53604424","53575428","52167221","52156369","53545307","52565625","53610225","53594648","53545088","52175041","52956249","52217425","52562272","52248293"],"team_id":1,"request_id":"cfd6bb99-4853-4c13-9f8e-a6af43e1727b","callback_url":"https:\/\/team:[EMAIL]\/webhook\/reports\/ready","report_period":"13 Apr 2026","report_name":"Tuesday report"}",
response: "{"request_id":"cfd6bb99-4853-4c13-9f8e-a6af43e1727b","status":"completed","timestamp":"2026-04-14T11:23:03.951289+00:00","s3_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/cfd6bb99-4853-4c13-9f8e-a6af43e1727b.MD","pdf_url":"s3:\/\/stage.jiminny.client-data\/5f0f4810-7e77-4086-8f69-93429ae4d70b\/panorama-reports\/cfd6bb99-4853-4c13-9f8e-a6af43e1727b.pdf"}",
requested_at: "2026-04-14 11:22:36",
generated_at: "2026-04-14 11:23:04",
sent_at: null,
created_at: "2026-04-14 11:22:36",
updated_at: "2026-04-14 11:23:04",
report: Jiminny\Models\AutomatedReport {#15221
id: 36,
#uuid: b"Aß#ôq¸»õ¶7i7eçªx",
team_id: 1,
type: "ask_jiminny",
status: 1,
frequency: "daily",
from: null,
to: null,
deal_value_min: null,
deal_value_max: null,
call_types: "[]",
media_types: "["pdf"]",
call_duration_min: null,
call_duration_max: null,
groups: "[]",
playbook_categories: null,
deal_at_call_stages: null,
current_deal_stages: null,
recipients: "{"users":[7160]}",
jiminny_recipients: null,
additional_prompt_input: null,
custom_name: "Tuesday report",
activity_search_id: 26913,
ask_anything_prompt_id: 62,
expires_at: "2026-04-30",
created_by: 7160,
created_at: "2026-04-14 11:20:20",
updated_at: "2026-04-14 11:20:20",
deleted_at: null,
},
},
],
}
> $repo->getGeneratedNotSentResults()->count();
= 7
> exit
INFO Goodbye.
root@b79a4bdd6905:/home/jiminny# [ec2-user@ip-10-30-93-249 ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@d1ac6fe11762:/home/jiminny#
DOCKER
Close Tab
DEV (docker)
Close Tab
APP (-zsh)
Close Tab
ec2-user@ip-10-30-93-249:~ (nc)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
✳ Unable to access screenpipe activity data (claude)
Close Tab
⌥⌘1
ec2-user@ip-10-30-93-249:~...
|
13449
|
|
24070
|
521
|
17
|
2026-04-15T11:57:12.718862+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776254232718_m2.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FinderFileEditViewWindowHelp• Not Secure | [URL_WI FinderFileEditViewWindowHelp• Not Secure | [URL_WITH_CREDENTIALS] AirDrop• Recents4 ApplicationsD DocumentsDesktop• Downloadslukasv cata> 2026-04-14S2026-04-10>2026-04-13> 2026-04-11>2026-04-12•_2026-04-09peneine-transeriotionsscreenpipe.dc Cloud Drive883 Sync folderLocation0 DXP4800PLUS-B5... A® NetworkTags•CRM• Orange• RedYellow• Green• Blue• PurpleO All Tags...40 ll O 1 Support Daily • in 3mA100% CWed 15 Apr 14:57:12sqlite-web 0.7.2table name…_sqlx_migrationsaudio_chunksDate ModifiedToday at 9:58Today at 9:59Today at 14:57Yesterday at 9:2412 Apr 2026 at 9:0213 Apr 2026 at 15:1311 Apr 2026 at 14:539 Apr 2026 at 20:0511 Apr 2026 at 15:035. Note: You can press Command + Shift +• again to hide the files when you aredone to keep your folders looking clean.QC.0:Ask GeminiPro vGemini is Al and can make mistakes, including about people.Your privacy and GeminiSummarize page1 of 9 selected, 38,33 GB availableul_eventsui_events_fts (v)ui_events_fts_configui_events_fts_dataui_events_fts_idxViceo cnunksIvision laosToggle helper tablesdb.sqlite frames 18766 rows, showing page 1StructureContentQueryExportSizeid video_chunk_id offset_index timestamp2026-04-09T16:53:09.043761+00:00/Users/lukas/.screenpipe/data/data/2026-04-09/1775 ...2026-04-09T16:53:19.073971+00:00/Users/lukas/.screenpipe/data/data/2026-04-09/1775…2020-04-09|16.03.20618409+00.001.92 GBFolden/Users/lukas/.screenpipe/data/data/2026-04-09/1775...1,09 GBFolder614,2 MBrolder/4.2 MBTolder52,6 MBFolder51 MBTocer40,6 MBFolderZero bytesrolaerZero bytesDocument2026-04-09T16:53:22.105029+00:00/Users/lukas/.screenpipe/data/data/2026-04-09/1775753602105_m1.jpg...2026-04-09T16:53:26.461881+00:00/Users/lukas/.screenpipe/data/data/2026-04-09/1775...2026-04-09T16:53:27.792118+00:00/Users/lukas/.screenplpe/data/data/2026-04-09/1775….2026-04-09T16:53:58.231232+00:00 /Users/lukas/screenpipe/data/data/2026-04-09/1775 …..1020-04-09|16.03.084/1401400.00/Users/lukas/.screenpipe/data/data/2026-04-09/1775.2026-04-09T16:54:08.010055+00:00 /Users/lukas/.screenpipe/data/data/2026-04-09/1775 …..2020-04-09|16.64.10.604541÷00:00/Users/lukas/.screenpipe/data/data/2026-04-09/1775.2026-04-09T16:54:38.409183+00:00 /Users/lukas/screenpipe/data/data/2026-04-09/1775 ...16 217 218 219 220 221 222 [PHONE]6-04-09T16:54:39.337717+00:00/Users/lukas/.screenpipe/data/data/2026-04-09/1775.2026-04-09T16:54:43.368152+00:00 /Users/lukas/screenpipe/data/data/2026-04-09/1775 .2026-04-09T16:54:44.984208+00:00 /Users/lukas/.screenpipe/data/data/2026-04-09/1775 …..2026-04-09T16:54:46.759465+00:00 /Users/lukas/.screenpipe/data/data/2026-04-09/1775...2026-04-09T16:54:48.449436+00:00 /Users/lukas/.screenpipe/data/data/2026-04-09/1775 …2026-04-09T16:54:56.444541+00:00 /Users/lukas/.screenpipe/data/data/2026-04-09/1775 ...2026-04-09T16:54:57.068201+00:00/Users/lukas/.screenpipe/data/data/2026-04-09/1775…LUZ0-U4-U9|10.00.01.010903+UU:U0/Users/lukas/.screenpipe/data/data/2026-04-09/1775 ...2026-04-09T16:55:03.064767+00:00 /Users/lukas/.screenpipe/data/data/2026-04-09/1775..2026-04-09T16:55:05.770267+00:00 /Users/lukas/screenpipe/data/data/2026-04-09/1775…..2026-04-09T16:55:06.385894+00:00 /Users/lukas/.screenpipe/data/data/2026-04-09/1775.2026-04-09T16:55:07.019897+00:00/Users/lukas/.screenpipe/data/data/2026-04-09/17752026-04-09T16:55:37.227257+00:00/Users/lukas/.screenpipe/data/data/2026-04-09/1775...app_name window_name focused browser_urldevice_name sync_id machine_id synced_at snapstNULLNULLSafariNULLTruemonitor_1NULLNULLNULLNULLNULLTrueNULLmonitor_NULLNULLNULLNULLmonitor_1: NULUNULLNULLNULLNULLSafariNULLActivityMonitorNIJILTActivityMonitorNULIDiaiTerm2iTerm2iTerm2iterm?iTerm2DiaNULLiTerm2iTerm2NULLNULLNULLNULLOrder RoomTrueService • HBOMaxNULLTrueOrder RoomService • HBOTrueMayNULLActivityMonitor - AllvrocessesNULLActivityMonitor - AllProcessesNULLPersonal:GitHub -scree…screenpipe"screenpipe"screenpipe"-zsh-zshNULLNULL-zsh-zshNULLNULLNULLNULLTrueTrueTrueTrueTrueTrueTrueTrueTrueTirueTrueTrueTrueTrueTrueTrueTrueTrueTruehttps://play.hbomax.com/Video/watch/16b35e6c-e745-NULLmonitor_1https://play.hbomax.com/videolwatch/16b35e6c-e745-NULLmonitor_1NULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNIMTNULL: NULUNULLNULLmonitor_monitor_1monitor_1monitor_1monitor_1monitor_monitor_1monitor_1monitor_1monitor_1monitor_1monitor_1monitor_1monitor_1monitor_1monitor_1monitor_monitor_1monitor_NULLNULL: NULUNULLNULLNULLNULLNULLNULLNULLNULLNIIITNULLNULLNULLNULLNIIITNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNIIINULLNULLNULLNULL# NIIINULLNULLNULLNULLNULLNULL: NULLINULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLINULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULL...
|
NULL
|
8800808424816734155
|
NULL
|
click
|
ocr
|
NULL
|
FinderFileEditViewWindowHelp• Not Secure | [URL_WI FinderFileEditViewWindowHelp• Not Secure | [URL_WITH_CREDENTIALS] AirDrop• Recents4 ApplicationsD DocumentsDesktop• Downloadslukasv cata> 2026-04-14S2026-04-10>2026-04-13> 2026-04-11>2026-04-12•_2026-04-09peneine-transeriotionsscreenpipe.dc Cloud Drive883 Sync folderLocation0 DXP4800PLUS-B5... A® NetworkTags•CRM• Orange• RedYellow• Green• Blue• PurpleO All Tags...40 ll O 1 Support Daily • in 3mA100% CWed 15 Apr 14:57:12sqlite-web 0.7.2table name…_sqlx_migrationsaudio_chunksDate ModifiedToday at 9:58Today at 9:59Today at 14:57Yesterday at 9:2412 Apr 2026 at 9:0213 Apr 2026 at 15:1311 Apr 2026 at 14:539 Apr 2026 at 20:0511 Apr 2026 at 15:035. Note: You can press Command + Shift +• again to hide the files when you aredone to keep your folders looking clean.QC.0:Ask GeminiPro vGemini is Al and can make mistakes, including about people.Your privacy and GeminiSummarize page1 of 9 selected, 38,33 GB availableul_eventsui_events_fts (v)ui_events_fts_configui_events_fts_dataui_events_fts_idxViceo cnunksIvision laosToggle helper tablesdb.sqlite frames 18766 rows, showing page 1StructureContentQueryExportSizeid video_chunk_id offset_index timestamp2026-04-09T16:53:09.043761+00:00/Users/lukas/.screenpipe/data/data/2026-04-09/1775 ...2026-04-09T16:53:19.073971+00:00/Users/lukas/.screenpipe/data/data/2026-04-09/1775…2020-04-09|16.03.20618409+00.001.92 GBFolden/Users/lukas/.screenpipe/data/data/2026-04-09/1775...1,09 GBFolder614,2 MBrolder/4.2 MBTolder52,6 MBFolder51 MBTocer40,6 MBFolderZero bytesrolaerZero bytesDocument2026-04-09T16:53:22.105029+00:00/Users/lukas/.screenpipe/data/data/2026-04-09/1775753602105_m1.jpg...2026-04-09T16:53:26.461881+00:00/Users/lukas/.screenpipe/data/data/2026-04-09/1775...2026-04-09T16:53:27.792118+00:00/Users/lukas/.screenplpe/data/data/2026-04-09/1775….2026-04-09T16:53:58.231232+00:00 /Users/lukas/screenpipe/data/data/2026-04-09/1775 …..1020-04-09|16.03.084/1401400.00/Users/lukas/.screenpipe/data/data/2026-04-09/1775.2026-04-09T16:54:08.010055+00:00 /Users/lukas/.screenpipe/data/data/2026-04-09/1775 …..2020-04-09|16.64.10.604541÷00:00/Users/lukas/.screenpipe/data/data/2026-04-09/1775.2026-04-09T16:54:38.409183+00:00 /Users/lukas/screenpipe/data/data/2026-04-09/1775 ...16 217 218 219 220 221 222 [PHONE]6-04-09T16:54:39.337717+00:00/Users/lukas/.screenpipe/data/data/2026-04-09/1775.2026-04-09T16:54:43.368152+00:00 /Users/lukas/screenpipe/data/data/2026-04-09/1775 .2026-04-09T16:54:44.984208+00:00 /Users/lukas/.screenpipe/data/data/2026-04-09/1775 …..2026-04-09T16:54:46.759465+00:00 /Users/lukas/.screenpipe/data/data/2026-04-09/1775...2026-04-09T16:54:48.449436+00:00 /Users/lukas/.screenpipe/data/data/2026-04-09/1775 …2026-04-09T16:54:56.444541+00:00 /Users/lukas/.screenpipe/data/data/2026-04-09/1775 ...2026-04-09T16:54:57.068201+00:00/Users/lukas/.screenpipe/data/data/2026-04-09/1775…LUZ0-U4-U9|10.00.01.010903+UU:U0/Users/lukas/.screenpipe/data/data/2026-04-09/1775 ...2026-04-09T16:55:03.064767+00:00 /Users/lukas/.screenpipe/data/data/2026-04-09/1775..2026-04-09T16:55:05.770267+00:00 /Users/lukas/screenpipe/data/data/2026-04-09/1775…..2026-04-09T16:55:06.385894+00:00 /Users/lukas/.screenpipe/data/data/2026-04-09/1775.2026-04-09T16:55:07.019897+00:00/Users/lukas/.screenpipe/data/data/2026-04-09/17752026-04-09T16:55:37.227257+00:00/Users/lukas/.screenpipe/data/data/2026-04-09/1775...app_name window_name focused browser_urldevice_name sync_id machine_id synced_at snapstNULLNULLSafariNULLTruemonitor_1NULLNULLNULLNULLNULLTrueNULLmonitor_NULLNULLNULLNULLmonitor_1: NULUNULLNULLNULLNULLSafariNULLActivityMonitorNIJILTActivityMonitorNULIDiaiTerm2iTerm2iTerm2iterm?iTerm2DiaNULLiTerm2iTerm2NULLNULLNULLNULLOrder RoomTrueService • HBOMaxNULLTrueOrder RoomService • HBOTrueMayNULLActivityMonitor - AllvrocessesNULLActivityMonitor - AllProcessesNULLPersonal:GitHub -scree…screenpipe"screenpipe"screenpipe"-zsh-zshNULLNULL-zsh-zshNULLNULLNULLNULLTrueTrueTrueTrueTrueTrueTrueTrueTrueTirueTrueTrueTrueTrueTrueTrueTrueTrueTruehttps://play.hbomax.com/Video/watch/16b35e6c-e745-NULLmonitor_1https://play.hbomax.com/videolwatch/16b35e6c-e745-NULLmonitor_1NULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNIMTNULL: NULUNULLNULLmonitor_monitor_1monitor_1monitor_1monitor_1monitor_monitor_1monitor_1monitor_1monitor_1monitor_1monitor_1monitor_1monitor_1monitor_1monitor_1monitor_monitor_1monitor_NULLNULL: NULUNULLNULLNULLNULLNULLNULLNULLNULLNIIITNULLNULLNULLNULLNIIITNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNIIINULLNULLNULLNULL# NIIINULLNULLNULLNULLNULLNULL: NULLINULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLINULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULLNULL...
|
24068
|
|
19352
|
411
|
23
|
2026-04-15T07:32:38.364213+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776238358364_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp(ab)| [Platform] Planning... 28 m leftmeet.google.com/tgb-pyuf-dri?authuser=lukas.kovalik%40jiminny.com3•Wed 15/10:32:379Galya Dimitrova (Presenting, annotating)SafariFileEditViewHistoryBookmarksDevelopWindowHelp2.₽•33 HubSpot|OpenAl#f Seit ServiceAWS US# Platform TeamA Journey fro.…AWS EUThe Revenue.jiminny.atlassian.net/I AWS AIPlanhatE Festures Adop...•] Emojї|BICTLOTE Ask Sminny V..4 LogRocket|Build your MC.P PostmarkBamboo= Exec Summar.88Search+ Create• Upgrade? For youRecentSpaces / Jiminny (New)Platform Team# Starred89 Apps@ Summary|& TimelineB Backlog|IID Active sprintsCalendarC Reports4 Testing BoardE ListQ Search backlog |1 +8|Version vEpic vType vLabel vQuick filters v& Plans0, SpacesPlatform Sprint 2 Q2 15 Apr - 29 Apr (18 work items)StarredJiminny (New)I CD Platform TeamIID Processing TeamII SE KanbanIID Capture TeamIID Enterprise Stability I...Discovery• JY-18909 [Part2) Automated reports with Ask Jiminny CAJ REPORTS© JY-19798 Evaluation for AI Activity TypesAUTO-DETECTED AC.A JY-20553 Delays in CRM Sync CPLATFORM STABILITYA JY-20632 Prepare fallback with email for SSO for 'persistent' name_id_formatREDUCE CHURNA JY-20489 Rework Nudges - Phase 2 - change Nudges to use the indexed_at periodCOST-EFFECTIVE AN…ProductA JY-9712 Change forever nudges to 1 year expirationCOST-EFFECTIVE AN…Recent@ JY-20564 Investigate and fix why exceed Fontawesome package limitsMAINTENANCE4 Service-Desk= More spaces |A JY-20372 AI Reports > Empty page design and promotionAJ REPORTSA JY-20157 Send email notification when the report is not generatedМeKEYUK= FiltersIB Dashboards• JY-20508 Notify a user before the AJ Report expiresAJ REPORTSOperations& CustomersX JY-20278 AJ Panorama> Dc=l* «h an intarnal aesara da auatama**)meet.google.com is sharing your screen.ASK ANTTHING ONAStop sharingA JY-20566AI Review - Q1HideGROWTH - MAINTAL..& FormsIN DEV VCODE REVIEWIN DEV VBUG FIXINGBACKLOGREADY FOR DEVBACKLOGBACKLOGBACKLOGBACKLOG8•Wed 15 Apr 10:32* Campus x) FirebaseF* LLM EvaluatioAsk RovoComponentsMore 9+409 0Start sprint= 12==5= 04.5= 86= 821= 8Steika StoyanovaGalya Dimitrova4 othersNikolay Nikolov10:32 AM | [Platform] Planning | Session EzSộ3→Lukas Kovalik32:24...
|
NULL
|
8800220318185596443
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp(ab)| [Platform] Planning... 28 m leftmeet.google.com/tgb-pyuf-dri?authuser=lukas.kovalik%40jiminny.com3•Wed 15/10:32:379Galya Dimitrova (Presenting, annotating)SafariFileEditViewHistoryBookmarksDevelopWindowHelp2.₽•33 HubSpot|OpenAl#f Seit ServiceAWS US# Platform TeamA Journey fro.…AWS EUThe Revenue.jiminny.atlassian.net/I AWS AIPlanhatE Festures Adop...•] Emojї|BICTLOTE Ask Sminny V..4 LogRocket|Build your MC.P PostmarkBamboo= Exec Summar.88Search+ Create• Upgrade? For youRecentSpaces / Jiminny (New)Platform Team# Starred89 Apps@ Summary|& TimelineB Backlog|IID Active sprintsCalendarC Reports4 Testing BoardE ListQ Search backlog |1 +8|Version vEpic vType vLabel vQuick filters v& Plans0, SpacesPlatform Sprint 2 Q2 15 Apr - 29 Apr (18 work items)StarredJiminny (New)I CD Platform TeamIID Processing TeamII SE KanbanIID Capture TeamIID Enterprise Stability I...Discovery• JY-18909 [Part2) Automated reports with Ask Jiminny CAJ REPORTS© JY-19798 Evaluation for AI Activity TypesAUTO-DETECTED AC.A JY-20553 Delays in CRM Sync CPLATFORM STABILITYA JY-20632 Prepare fallback with email for SSO for 'persistent' name_id_formatREDUCE CHURNA JY-20489 Rework Nudges - Phase 2 - change Nudges to use the indexed_at periodCOST-EFFECTIVE AN…ProductA JY-9712 Change forever nudges to 1 year expirationCOST-EFFECTIVE AN…Recent@ JY-20564 Investigate and fix why exceed Fontawesome package limitsMAINTENANCE4 Service-Desk= More spaces |A JY-20372 AI Reports > Empty page design and promotionAJ REPORTSA JY-20157 Send email notification when the report is not generatedМeKEYUK= FiltersIB Dashboards• JY-20508 Notify a user before the AJ Report expiresAJ REPORTSOperations& CustomersX JY-20278 AJ Panorama> Dc=l* «h an intarnal aesara da auatama**)meet.google.com is sharing your screen.ASK ANTTHING ONAStop sharingA JY-20566AI Review - Q1HideGROWTH - MAINTAL..& FormsIN DEV VCODE REVIEWIN DEV VBUG FIXINGBACKLOGREADY FOR DEVBACKLOGBACKLOGBACKLOGBACKLOG8•Wed 15 Apr 10:32* Campus x) FirebaseF* LLM EvaluatioAsk RovoComponentsMore 9+409 0Start sprint= 12==5= 04.5= 86= 821= 8Steika StoyanovaGalya Dimitrova4 othersNikolay Nikolov10:32 AM | [Platform] Planning | Session EzSộ3→Lukas Kovalik32:24...
|
NULL
|
|
1948
|
40
|
67
|
2026-04-12T08:43:24.418560+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-12/1775 /Users/lukas/.screenpipe/data/data/2026-04-12/1775983404418_m2.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpjiminny.atlassian.net/jira/software/c/projects/JY/boards/37?selectedlssue=JY-1890988O JIMINNYQ SearchProblem loading pageM Lukas Kovalik, here is your weeklyS0 SettingsInbox (1,539) - lukas.kovalik@umir+ New Tabg For you• Recent# Starred04 AppsQ, SpacesRecent2) Jiminny (New)1 D Platform TeamSpaces / Jiminny (New)Platform Team 88# Summary& TimelineB BaQ Search boardREADY FOR DEV 1T ***# JY-19240 / [ JY-18909• the creator of the report should be able to delete it - deleting it will delete only this specific paf• 'Ask Jiminny Report' should be added as an option to the Report type filter so users can filter the list forsuch reports• when a report is shared with a user then show who shared it in the 'Shared' column - $ [URL_WITH_CREDENTIALS] DonePri..Stor...Status= MIDONEV= MIN DEV= MDONE V=MDONEV= МQ : INDEVV2 : INDEVV= МDONEV=MDONE V= MDONE V=MDONEV=MDONE v= MDONE v= MINDEV=MDONEVDONE V=MDONE V=MREADY FOR DEV V=MM ( READY FOR DEV vDEPLOYED+ Create2In Dey v* Improve StoryDetailsAssigneeReporterDevelopmentneleasesComponentsSub-ProductLabelsStory pointestimateStoryPointsOrganisatioPriorityFix versionsSprintDaysINeeo WArarentCanny LinksQ. Steliyan GeorgievAssign to meGalya Dimitrova@ Open with VS Code• Orancnes23 commits1 pull request1 build failingo aays age(OPEN]A Production7 See all deploymentsPlatformAdd optionsAI) (BE) (FE) (QA)None13Ivone= MediumNonePlattorm Sorint T 02Yes4 JY-19240 AJ ReportsOpen Canny Links> More fields Original estimate, Time trackingloblA100% C28Sun 12 Apr 11:43:23Ask RovoDeploymentsE Archived work itemsMore 4Complete sprintGroup: QueriesDEPLOY 8Fix downtime during to featureflag release(SUPPORT TICKETSDeployed** JY-20565Al Review - O1GROWTH - MAINTAIN OUR COMPETITI...Deployed# JY-1998210•.0=ino suen column Iyoe on enuuy"-Vent"PLATFORM STABILITYDeployedJY-203840.5. •ee.=Missed deletion of stale dealsISKSREDUCE CHURNClosed** JY-206191?. •0•=[Pipedrive] DI > status notlabeled, date data missingREDUCE CHURNDeployed[ JY-206140.5 % 000 =OD/TI > Refresh the resultswnen une tiele s clearee wunthe 'x'FE IMPROVEMENTSDeployedIJY-Z05/"u.s eee=Fix [HubSpot] Updatingassociations(REDUCE CHURN)Closed1** JY-20621o00=...
|
NULL
|
8800077444456599004
|
NULL
|
click
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpjiminny.atlassian.net/jira/software/c/projects/JY/boards/37?selectedlssue=JY-1890988O JIMINNYQ SearchProblem loading pageM Lukas Kovalik, here is your weeklyS0 SettingsInbox (1,539) - lukas.kovalik@umir+ New Tabg For you• Recent# Starred04 AppsQ, SpacesRecent2) Jiminny (New)1 D Platform TeamSpaces / Jiminny (New)Platform Team 88# Summary& TimelineB BaQ Search boardREADY FOR DEV 1T ***# JY-19240 / [ JY-18909• the creator of the report should be able to delete it - deleting it will delete only this specific paf• 'Ask Jiminny Report' should be added as an option to the Report type filter so users can filter the list forsuch reports• when a report is shared with a user then show who shared it in the 'Shared' column - $ [URL_WITH_CREDENTIALS] DonePri..Stor...Status= MIDONEV= MIN DEV= MDONE V=MDONEV= МQ : INDEVV2 : INDEVV= МDONEV=MDONE V= MDONE V=MDONEV=MDONE v= MDONE v= MINDEV=MDONEVDONE V=MDONE V=MREADY FOR DEV V=MM ( READY FOR DEV vDEPLOYED+ Create2In Dey v* Improve StoryDetailsAssigneeReporterDevelopmentneleasesComponentsSub-ProductLabelsStory pointestimateStoryPointsOrganisatioPriorityFix versionsSprintDaysINeeo WArarentCanny LinksQ. Steliyan GeorgievAssign to meGalya Dimitrova@ Open with VS Code• Orancnes23 commits1 pull request1 build failingo aays age(OPEN]A Production7 See all deploymentsPlatformAdd optionsAI) (BE) (FE) (QA)None13Ivone= MediumNonePlattorm Sorint T 02Yes4 JY-19240 AJ ReportsOpen Canny Links> More fields Original estimate, Time trackingloblA100% C28Sun 12 Apr 11:43:23Ask RovoDeploymentsE Archived work itemsMore 4Complete sprintGroup: QueriesDEPLOY 8Fix downtime during to featureflag release(SUPPORT TICKETSDeployed** JY-20565Al Review - O1GROWTH - MAINTAIN OUR COMPETITI...Deployed# JY-1998210•.0=ino suen column Iyoe on enuuy"-Vent"PLATFORM STABILITYDeployedJY-203840.5. •ee.=Missed deletion of stale dealsISKSREDUCE CHURNClosed** JY-206191?. •0•=[Pipedrive] DI > status notlabeled, date data missingREDUCE CHURNDeployed[ JY-206140.5 % 000 =OD/TI > Refresh the resultswnen une tiele s clearee wunthe 'x'FE IMPROVEMENTSDeployedIJY-Z05/"u.s eee=Fix [HubSpot] Updatingassociations(REDUCE CHURN)Closed1** JY-20621o00=...
|
NULL
|
|
17875
|
381
|
55
|
2026-04-14T16:00:16.553223+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776182416553_m1.jpg...
|
Boosteroid
|
Boosteroid
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+FirefoxFileEditViewHistoryBookmarksProfilesToolsW +FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelpEDHomeDMsActivityFilesLater..•More+→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 messagesAneliya Angelova, ...Vasil VasilevSteliyan GeorgievAdelina Petrova, Ili...Ro Adelina Petrova% Galya DimitrovaRs Nikolay Nikolov "2Galya Dimitrova, Ni...2Galya Dimitrova, Ni...i: AppsJira CloudToastGoogle Cale...Aneliya Angelova, ...86 0• MessagesAdd canvasпредполагTodayПДФ-а. Неправя?O Files+чямаме в шрифта на, рен какво да ги@Nikolay Yankov, някой от горните ли имашпредвид или трето? (edited)Nikolay Yankov 4:09 PMпоследния дето пратихSteliyan Georgiev 4:09 PMда, за него говоря и азNikolay Yankov 4:10 PMможе би да ги скипваме такива emojis* 1да не пречат на процесването и отговораSteliyan Georgiev 4:10 PMне сьм много сигурен какkaLukas Kovalik 5:41 PMсега ще го добавя това за disable on expired,после може да се тества по сьщия начинкато генериране сьс сьщата командаH1NewNikolay Yankov 6:14 PMпушнах фикса за delete да маха реда отраблицатаMessage Aneliya Angelova, Nikolay Yankov, Steli...+(lol14Activity MonitorAll ProcessesProcess NameBoosteroidFirefoxCP Isolated Web ContentWindowServerFirefoxFirefoxFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentCursorUlViewService (Not Responding)Notion Calendar Helper (Renderer)VTDecoderXPCServiceFirefox GPU HelperSlack Helper (Renderer)Firefox GPU HelperNotion Helper (Renderer)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentclaudeMEMORY PRESSUREMem...2,01 GB1,19 GB994,2 MB884,7 MB782,2 MB766,5 MB737,0 MB732,5 MB637,4 MB597,7 MB592,4 MB549,7 MB547,1 MB546,9 MB484,9 MB484,8 MB475,4 MB465,3 MB417,8 MB390,5 MB388,2 MB383,8 MB375,1 MB346,6 MB335,8 MB321,1 MB278,9 MB277,9 MBPhysical Memory:Memory Used:Cached Files:Swap Used:100% <47Tue 14 Apr 19:00:16CPUMemoryDiskThreads382323827428252315112716272029222426242727232725222413EnergyPorts60412216 15694070812412612016 45617216623919022931813111812112512212512712112412711812172PID248351470040714664801460035848495004784226548248431467324273801911487087349623340701479150891133432824628931710951120232249278005091016,00 GB14,29 GB<1,65 GB2,74 GBApp Memory:Wired Memory:Compressed:NetworkUserlukaslukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas4,19 GB2,93 GB6,63 GB...
|
NULL
|
8798470710299003346
|
NULL
|
click
|
ocr
|
NULL
|
+FirefoxFileEditViewHistoryBookmarksProfilesToolsW +FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelpEDHomeDMsActivityFilesLater..•More+→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 messagesAneliya Angelova, ...Vasil VasilevSteliyan GeorgievAdelina Petrova, Ili...Ro Adelina Petrova% Galya DimitrovaRs Nikolay Nikolov "2Galya Dimitrova, Ni...2Galya Dimitrova, Ni...i: AppsJira CloudToastGoogle Cale...Aneliya Angelova, ...86 0• MessagesAdd canvasпредполагTodayПДФ-а. Неправя?O Files+чямаме в шрифта на, рен какво да ги@Nikolay Yankov, някой от горните ли имашпредвид или трето? (edited)Nikolay Yankov 4:09 PMпоследния дето пратихSteliyan Georgiev 4:09 PMда, за него говоря и азNikolay Yankov 4:10 PMможе би да ги скипваме такива emojis* 1да не пречат на процесването и отговораSteliyan Georgiev 4:10 PMне сьм много сигурен какkaLukas Kovalik 5:41 PMсега ще го добавя това за disable on expired,после може да се тества по сьщия начинкато генериране сьс сьщата командаH1NewNikolay Yankov 6:14 PMпушнах фикса за delete да маха реда отраблицатаMessage Aneliya Angelova, Nikolay Yankov, Steli...+(lol14Activity MonitorAll ProcessesProcess NameBoosteroidFirefoxCP Isolated Web ContentWindowServerFirefoxFirefoxFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentCursorUlViewService (Not Responding)Notion Calendar Helper (Renderer)VTDecoderXPCServiceFirefox GPU HelperSlack Helper (Renderer)Firefox GPU HelperNotion Helper (Renderer)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentclaudeMEMORY PRESSUREMem...2,01 GB1,19 GB994,2 MB884,7 MB782,2 MB766,5 MB737,0 MB732,5 MB637,4 MB597,7 MB592,4 MB549,7 MB547,1 MB546,9 MB484,9 MB484,8 MB475,4 MB465,3 MB417,8 MB390,5 MB388,2 MB383,8 MB375,1 MB346,6 MB335,8 MB321,1 MB278,9 MB277,9 MBPhysical Memory:Memory Used:Cached Files:Swap Used:100% <47Tue 14 Apr 19:00:16CPUMemoryDiskThreads382323827428252315112716272029222426242727232725222413EnergyPorts60412216 15694070812412612016 45617216623919022931813111812112512212512712112412711812172PID248351470040714664801460035848495004784226548248431467324273801911487087349623340701479150891133432824628931710951120232249278005091016,00 GB14,29 GB<1,65 GB2,74 GBApp Memory:Wired Memory:Compressed:NetworkUserlukaslukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas4,19 GB2,93 GB6,63 GB...
|
NULL
|
|
7731
|
144
|
43
|
2026-04-13T16:20:32.741785+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-13/1776 /Users/lukas/.screenpipe/data/data/2026-04-13/1776097232741_m1.jpg...
|
Code
|
Getting started with Cla… — screenpipe [SSH: 100.7 Getting started with Cla… — screenpipe [SSH: 100.73.206.126]...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
SCREENPIPE [SSH: [IP_ADDRESS]]
#recycle
app
__pycache__
consumers
static
.env
cli.py
db.py
docker-compose.yml
Dockerfile
main.py
requirements.txt
data
pipes
db.sqlite
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
pipe.md, Editor Group 1
Untitled-2, Editor Group 1
docker-compose.yml, preview, Editor Group 1
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe/db.sqlite:/data/db.sqlite:ro
- /volume1/screenpipe/data:/data/data:ro
env_file:
- .env
environment:
TZ: Europe/Sofia
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe/db.sqlite:/data/db.sqlite:ro
- /volume1/screenpipe/data:/data/data:ro
env_file:
- .env
environment:
TZ: Europe/Sofia
Getting started with Cla…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: [IP_ADDRESS]
SSH: [IP_ADDRESS]
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Screen Reader Optimized
Info: Setting up SSH Host [IP_ADDRESS]: Setting up SSH tunnel
Command Succeeded
Getting started with Claude agent SDK
Session history
New session
Message actions
how to start it
Thinking
Thinking
Let me check what's in your working directory to understand what you're referring to.
Bash
IN
ls /volume1/screenpipe
Copy code to clipboard
OUT
app
data
db.sqlite
pipes
#recycle
[rerun: b1]
Bash
IN
ls /volume1/screenpipe/app && ls /volume1/screenpipe/pipes
Copy code to clipboard
OUT
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
requirements.txt
static
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
[rerun: b2]
Read
docker-compose.yml
docker-compose.yml
This is a Screenpipe app with a Docker Compose setup. To start it:
Copy code to clipboard
cd /volume1/screenpipe/app
docker compose up -d
This builds the image (first run) and starts the container in the background
The app will be accessible at
[URL_WITH_CREDENTIALS]
sudo docker compose -f /volume1/screenpipe/app/docker-compose.yml up -d
Once running, the dashboard will be at
http://your-nas-ip:8766
http://your-nas-ip:8766
and it will query the data you already copied — the database has 6,923 frames and 5,464 OCR records ready to go.
Message actions
docker-compose.yml
docker-compose.yml
I have ugos ugreen nas. I can see the ui but it is empty. No data. Also when I open it there is defsault today, lets make default yesterday.
Thinking
Thinking
Let me check why data isn't showing and look at the frontend.
Bash
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT DATE(timestamp) as d, COUNT(*) FROM frames GROUP BY d ORDER BY d DESC LIMIT 10;"
Copy code to clipboard
OUT
2026-04-13|2643
2026-04-12|2455
2026-04-11|1302
2026-04-09|523
[rerun: b1]
Bash
IN
ls /volume1/screenpipe/app/static/
Copy code to clipboard
OUT
index.html
[rerun: b2]
Bash
IN
wc -l /volume1/screenpipe/app/static/index.html
Copy code to clipboard
OUT
1048 /volume1/screenpipe/app/static/index.html
[rerun: b3]
Bash
IN
grep -n "today\|new Date\|date\|default" /volume1/screenpipe/app/static/index.html | head -40
Copy code to clipboard
OUT
24:input[type="date"] {
71:.sess-segment:hover { opacity: 0.8; cursor: default; }
179:button:disabled { opacity: 0.4; cursor: default; }
276: <input type="date" id="datePicker" onchange="refresh()">
336: <select id="sSrc" onchange="updateSourceHint()">
356: <input type="date" id="sDate">
388: <div id="workReportOut"><div class="empty">Click Generate Report to build a structured work summary for the selected date.</div></div>
398: <option value="standup">Standup Update</option>
453:const dp = document.getElementById('datePicker');
454:dp.value = new Date().toISOString().slice(0,10);
525: // Re-render bars to update selection highlight
679: const bucket = Math.floor(new Date(r.timestamp).getTime() / (everyMin * 60000));
710:function updateSourceHint() {
721: updateSourceHint();
797: if (!rows.length) { el.innerHTML = '<div class="empty">No audio for this date.</div>'; return; }
835: try { return new Date(ts).toLocaleTimeString([],{hour:'2-digit',minute:'2-digit'}); }
885: const spanMs = new Date(s.day_end) - new Date(s.day_start);
891: const left = (new Date(seg.start) - new Date(s.day_start)) / spanMs * 100;
892: const width = (new Date(seg.end) - new Date(seg.start)) / spanMs * 100;
899: const left = (new Date(brk.start) - new Date(s.day_start)) / spanMs * 100;
900: const width = (new Date(brk.end) - new Date(brk.start)) / spanMs * 100;
[rerun: b4]
Thinking
Thinking
Bash
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT timestamp FROM frames ORDER BY timestamp DESC LIMIT 3; SELECT timestamp FROM frames ORDER BY timestamp ASC LIMIT 3;"
Copy code to clipboard
OUT
2026-04-13T14:19:10.998594+00:00
2026-04-13T14:19:08.686883+00:00
2026-04-13T14:19:06.581255+00:00
2026-04-09T16:53:09.043761+00:00
2026-04-09T16:53:19.073971+00:00
2026-04-09T16:53:20.618409+00:00
[rerun: b5]
Read
index.html
index.html
(lines 451-480)
Thinking
Thinking
Bash
IN
curl -s "http://localhost:8766/api/stats?d=2026-04-13" 2>&1 | head -50
Copy code to clipboard
OUT
{"date":"2026-04-13","total_frames":0,"first_seen":null,"last_seen":null,"unique_apps":0,"audio_segments":0,"ui_events":0}
[rerun: b6]
Thinking
Thinking
Bash
IN
ls /volume1/screenpipe/app/consumers/
Copy code to clipboard
OUT
activity.py
audio.py
elements.py
__init__.py
interactions.py
ocr.py
report.py
summary.py
[rerun: b7]
Read
activity.py
activity.py
Thinking
Thinking
Bash
IN
curl -s "http://localhost:8766/api/activity/apps?d=2026-04-13" 2>&1 | head -20
Copy code to clipboard
OUT...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update Extensions (⇧⌘X) - 2 require update","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: 100.73.206.126]","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: 100.73.206.126]","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: 100.73.206.126]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"__pycache__","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"consumers","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"static","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"cli.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"db.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"role_description":"text"},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Untitled-2, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"docker-compose.yml, preview, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"role_description":"text"},{"role":"AXTextArea","text":"services:\n screenpipe-app:\n build: .\n container_name: screenpipe-app\n restart: unless-stopped\n ports:\n - \"8766:8000\"\n volumes:\n - /volume1/screenpipe/db.sqlite:/data/db.sqlite:ro\n - /volume1/screenpipe/data:/data/data:ro\n env_file:\n - .env\n environment:\n TZ: Europe/Sofia","depth":28,"value":"services:\n screenpipe-app:\n build: .\n container_name: screenpipe-app\n restart: unless-stopped\n ports:\n - \"8766:8000\"\n volumes:\n - /volume1/screenpipe/db.sqlite:/data/db.sqlite:ro\n - /volume1/screenpipe/data:/data/data:ro\n env_file:\n - .env\n environment:\n TZ: Europe/Sofia","role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"services:\n screenpipe-app:\n build: .\n container_name: screenpipe-app\n restart: unless-stopped\n ports:\n - \"8766:8000\"\n volumes:\n - /volume1/screenpipe/db.sqlite:/data/db.sqlite:ro\n - /volume1/screenpipe/data:/data/data:ro\n env_file:\n - .env\n environment:\n TZ: Europe/Sofia","depth":29,"role_description":"text"},{"role":"AXRadioButton","text":"Getting started with Cla…, Editor Group 2","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"role_description":"text"},{"role":"AXButton","text":"remote SSH: 100.73.206.126","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"SSH: 100.73.206.126","depth":17,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Setting up SSH Host 100.73.206.126: Setting up SSH tunnel","depth":12,"role_description":"text"},{"role":"AXStaticText","text":"Command Succeeded","depth":12,"role_description":"text"},{"role":"AXButton","text":"Getting started with Claude agent SDK","depth":18,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":18,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":18,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"how to start it","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Let me check what's in your working directory to understand what you're referring to.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"app\ndata\ndb.sqlite\npipes\n#recycle\n[rerun: b1]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/app && ls /volume1/screenpipe/pipes","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"cli.py\nconsumers\ndb.py\ndocker-compose.yml\nDockerfile\nmain.py\nrequirements.txt\nstatic\nai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\n[rerun: b2]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":23,"role_description":"text"},{"role":"AXLink","text":"docker-compose.yml","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"This is a Screenpipe app with a Docker Compose setup. To start it:","depth":22,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":22,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cd /volume1/screenpipe/app\ndocker compose up -d","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"This builds the image (first run) and starts the container in the background","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"The app will be accessible at","depth":23,"role_description":"text"},{"role":"AXLink","text":"http://your-server-ip:8766","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"http://your-server-ip:8766","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"To check if it's running:","depth":22,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":22,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker compose ps","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"To view logs:","depth":22,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":22,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker compose logs -f","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Make sure an","depth":22,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"file exists in","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/app/","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"before starting — the compose file references one (","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"env_file: .env","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"). If it's missing, the container will fail to start.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/app/.env 2>/dev/null && echo \"exists\" || echo \"MISSING\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/app/.env\nexists\n[rerun: b3]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"The","depth":22,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"file exists, so you're good to go. Just run:","depth":22,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":22,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cd /volume1/screenpipe/app && docker compose up -d","depth":24,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"docker-compose.yml","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"I opened it but there are no data after I coppied it there. the idea behind this app is to have the data pasted form screenpipe mac app and only query it and work with it","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Let me check the current state of the data.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls -lh /volume1/screenpipe/db.sqlite && ls /volume1/screenpipe/data/ | head -20","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"-rwxrwxrwx 1 Adm1n admin 423M Apr 13 17:20 /volume1/screenpipe/db.sqlite\n2026-04-09\n2026-04-11\n2026-04-12\n[rerun: b1]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \".tables\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx\n[rerun: b2]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT COUNT(*) FROM frames; SELECT COUNT(*) FROM ocr_text; SELECT COUNT(*) FROM audio_transcriptions;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"6923\n5464\n3\n[rerun: b3]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"The data is there — 423MB database with 6,923 frames and 5,464 OCR records. The app just isn't running yet. Let me check what the app actually does and whether it can query this data properly.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":23,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":23,"role_description":"text"},{"role":"AXLink","text":"db.py","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"db.py","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"The data is actually there — the database has 423MB of data. The app just needs to be started. Let me start it:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"cd /volume1/screenpipe/app && docker compose up -d 2>&1","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Exit code 1\npermission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get \"http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3Dapp%22%3Atrue%7D%7D\": dial unix /var/run/docker.sock: connect: permission denied\n[rerun: b4]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sudo docker compose -f /volume1/screenpipe/app/docker-compose.yml up -d 2>&1","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Exit code 1\nsudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper\nsudo: a password is required\n[rerun: b5]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"groups && id","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"admin users ughomeusers Media Social\nuid=1000(Adm1n) gid=10(admin) groups=10(admin),100(users),133(ughomeusers),1001(Media),1002(Social)\n[rerun: b6]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"You need to run Docker with elevated privileges. You're not in the","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"docker","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"group. There are two options:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Option 1 — Run via Synology's Container Manager (DSM GUI)","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Open DSM → Container Manager → Project → Create project → point it to","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/app/docker-compose.yml","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Option 2 — Add yourself to the docker group (requires admin/root once)","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Open an SSH terminal as root (or via DSM terminal with admin):","depth":22,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":22,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"sudo synogroup --add docker Adm1n\n# then log out and back in, then:\ncd /volume1/screenpipe/app && docker compose up -d","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Option 3 — Run it directly from an SSH session with sudo","depth":23,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":22,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"ssh admin@your-nas-ip\nsudo docker compose -f /volume1/screenpipe/app/docker-compose.yml up -d","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Once running, the dashboard will be at","depth":22,"role_description":"text"},{"role":"AXLink","text":"http://your-nas-ip:8766","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"http://your-nas-ip:8766","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"and it will query the data you already copied — the database has 6,923 frames and 5,464 OCR records ready to go.","depth":22,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"docker-compose.yml","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"I have ugos ugreen nas. I can see the ui but it is empty. No data. Also when I open it there is defsault today, lets make default yesterday.","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Let me check why data isn't showing and look at the frontend.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT DATE(timestamp) as d, COUNT(*) FROM frames GROUP BY d ORDER BY d DESC LIMIT 10;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-13|2643\n2026-04-12|2455\n2026-04-11|1302\n2026-04-09|523\n[rerun: b1]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/app/static/","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"index.html\n[rerun: b2]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"wc -l /volume1/screenpipe/app/static/index.html","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"1048 /volume1/screenpipe/app/static/index.html\n[rerun: b3]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"today\\|new Date\\|date\\|default\" /volume1/screenpipe/app/static/index.html | head -40","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"24:input[type=\"date\"] {\n71:.sess-segment:hover { opacity: 0.8; cursor: default; }\n179:button:disabled { opacity: 0.4; cursor: default; }\n276: <input type=\"date\" id=\"datePicker\" onchange=\"refresh()\">\n336: <select id=\"sSrc\" onchange=\"updateSourceHint()\">\n356: <input type=\"date\" id=\"sDate\">\n388: <div id=\"workReportOut\"><div class=\"empty\">Click Generate Report to build a structured work summary for the selected date.</div></div>\n398: <option value=\"standup\">Standup Update</option>\n453:const dp = document.getElementById('datePicker');\n454:dp.value = new Date().toISOString().slice(0,10);\n525: // Re-render bars to update selection highlight\n679: const bucket = Math.floor(new Date(r.timestamp).getTime() / (everyMin * 60000));\n710:function updateSourceHint() {\n721: updateSourceHint();\n797: if (!rows.length) { el.innerHTML = '<div class=\"empty\">No audio for this date.</div>'; return; }\n835: try { return new Date(ts).toLocaleTimeString([],{hour:'2-digit',minute:'2-digit'}); }\n885: const spanMs = new Date(s.day_end) - new Date(s.day_start);\n891: const left = (new Date(seg.start) - new Date(s.day_start)) / spanMs * 100;\n892: const width = (new Date(seg.end) - new Date(seg.start)) / spanMs * 100;\n899: const left = (new Date(brk.start) - new Date(s.day_start)) / spanMs * 100;\n900: const width = (new Date(brk.end) - new Date(brk.start)) / spanMs * 100;\n[rerun: b4]","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT timestamp FROM frames ORDER BY timestamp DESC LIMIT 3; SELECT timestamp FROM frames ORDER BY timestamp ASC LIMIT 3;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-13T14:19:10.998594+00:00\n2026-04-13T14:19:08.686883+00:00\n2026-04-13T14:19:06.581255+00:00\n2026-04-09T16:53:09.043761+00:00\n2026-04-09T16:53:19.073971+00:00\n2026-04-09T16:53:20.618409+00:00\n[rerun: b5]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":23,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"(lines 451-480)","depth":23,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"curl -s \"http://localhost:8766/api/stats?d=2026-04-13\" 2>&1 | head -50","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"{\"date\":\"2026-04-13\",\"total_frames\":0,\"first_seen\":null,\"last_seen\":null,\"unique_apps\":0,\"audio_segments\":0,\"ui_events\":0}\n[rerun: b6]","depth":23,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/app/consumers/","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"activity.py\naudio.py\nelements.py\n__init__.py\ninteractions.py\nocr.py\nreport.py\nsummary.py\n[rerun: b7]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":23,"role_description":"text"},{"role":"AXLink","text":"activity.py","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"activity.py","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"curl -s \"http://localhost:8766/api/activity/apps?d=2026-04-13\" 2>&1 | head -20","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"}]...
|
8798229737889626172
|
-8840388707629754751
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
SCREENPIPE [SSH: [IP_ADDRESS]]
#recycle
app
__pycache__
consumers
static
.env
cli.py
db.py
docker-compose.yml
Dockerfile
main.py
requirements.txt
data
pipes
db.sqlite
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
pipe.md, Editor Group 1
Untitled-2, Editor Group 1
docker-compose.yml, preview, Editor Group 1
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe/db.sqlite:/data/db.sqlite:ro
- /volume1/screenpipe/data:/data/data:ro
env_file:
- .env
environment:
TZ: Europe/Sofia
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe/db.sqlite:/data/db.sqlite:ro
- /volume1/screenpipe/data:/data/data:ro
env_file:
- .env
environment:
TZ: Europe/Sofia
Getting started with Cla…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: [IP_ADDRESS]
SSH: [IP_ADDRESS]
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Screen Reader Optimized
Info: Setting up SSH Host [IP_ADDRESS]: Setting up SSH tunnel
Command Succeeded
Getting started with Claude agent SDK
Session history
New session
Message actions
how to start it
Thinking
Thinking
Let me check what's in your working directory to understand what you're referring to.
Bash
IN
ls /volume1/screenpipe
Copy code to clipboard
OUT
app
data
db.sqlite
pipes
#recycle
[rerun: b1]
Bash
IN
ls /volume1/screenpipe/app && ls /volume1/screenpipe/pipes
Copy code to clipboard
OUT
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
requirements.txt
static
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
[rerun: b2]
Read
docker-compose.yml
docker-compose.yml
This is a Screenpipe app with a Docker Compose setup. To start it:
Copy code to clipboard
cd /volume1/screenpipe/app
docker compose up -d
This builds the image (first run) and starts the container in the background
The app will be accessible at
[URL_WITH_CREDENTIALS]
sudo docker compose -f /volume1/screenpipe/app/docker-compose.yml up -d
Once running, the dashboard will be at
http://your-nas-ip:8766
http://your-nas-ip:8766
and it will query the data you already copied — the database has 6,923 frames and 5,464 OCR records ready to go.
Message actions
docker-compose.yml
docker-compose.yml
I have ugos ugreen nas. I can see the ui but it is empty. No data. Also when I open it there is defsault today, lets make default yesterday.
Thinking
Thinking
Let me check why data isn't showing and look at the frontend.
Bash
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT DATE(timestamp) as d, COUNT(*) FROM frames GROUP BY d ORDER BY d DESC LIMIT 10;"
Copy code to clipboard
OUT
2026-04-13|2643
2026-04-12|2455
2026-04-11|1302
2026-04-09|523
[rerun: b1]
Bash
IN
ls /volume1/screenpipe/app/static/
Copy code to clipboard
OUT
index.html
[rerun: b2]
Bash
IN
wc -l /volume1/screenpipe/app/static/index.html
Copy code to clipboard
OUT
1048 /volume1/screenpipe/app/static/index.html
[rerun: b3]
Bash
IN
grep -n "today\|new Date\|date\|default" /volume1/screenpipe/app/static/index.html | head -40
Copy code to clipboard
OUT
24:input[type="date"] {
71:.sess-segment:hover { opacity: 0.8; cursor: default; }
179:button:disabled { opacity: 0.4; cursor: default; }
276: <input type="date" id="datePicker" onchange="refresh()">
336: <select id="sSrc" onchange="updateSourceHint()">
356: <input type="date" id="sDate">
388: <div id="workReportOut"><div class="empty">Click Generate Report to build a structured work summary for the selected date.</div></div>
398: <option value="standup">Standup Update</option>
453:const dp = document.getElementById('datePicker');
454:dp.value = new Date().toISOString().slice(0,10);
525: // Re-render bars to update selection highlight
679: const bucket = Math.floor(new Date(r.timestamp).getTime() / (everyMin * 60000));
710:function updateSourceHint() {
721: updateSourceHint();
797: if (!rows.length) { el.innerHTML = '<div class="empty">No audio for this date.</div>'; return; }
835: try { return new Date(ts).toLocaleTimeString([],{hour:'2-digit',minute:'2-digit'}); }
885: const spanMs = new Date(s.day_end) - new Date(s.day_start);
891: const left = (new Date(seg.start) - new Date(s.day_start)) / spanMs * 100;
892: const width = (new Date(seg.end) - new Date(seg.start)) / spanMs * 100;
899: const left = (new Date(brk.start) - new Date(s.day_start)) / spanMs * 100;
900: const width = (new Date(brk.end) - new Date(brk.start)) / spanMs * 100;
[rerun: b4]
Thinking
Thinking
Bash
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT timestamp FROM frames ORDER BY timestamp DESC LIMIT 3; SELECT timestamp FROM frames ORDER BY timestamp ASC LIMIT 3;"
Copy code to clipboard
OUT
2026-04-13T14:19:10.998594+00:00
2026-04-13T14:19:08.686883+00:00
2026-04-13T14:19:06.581255+00:00
2026-04-09T16:53:09.043761+00:00
2026-04-09T16:53:19.073971+00:00
2026-04-09T16:53:20.618409+00:00
[rerun: b5]
Read
index.html
index.html
(lines 451-480)
Thinking
Thinking
Bash
IN
curl -s "http://localhost:8766/api/stats?d=2026-04-13" 2>&1 | head -50
Copy code to clipboard
OUT
{"date":"2026-04-13","total_frames":0,"first_seen":null,"last_seen":null,"unique_apps":0,"audio_segments":0,"ui_events":0}
[rerun: b6]
Thinking
Thinking
Bash
IN
ls /volume1/screenpipe/app/consumers/
Copy code to clipboard
OUT
activity.py
audio.py
elements.py
__init__.py
interactions.py
ocr.py
report.py
summary.py
[rerun: b7]
Read
activity.py
activity.py
Thinking
Thinking
Bash
IN
curl -s "http://localhost:8766/api/activity/apps?d=2026-04-13" 2>&1 | head -20
Copy code to clipboard
OUT...
|
NULL
|
|
13992
|
309
|
29
|
2026-04-14T13:06:30.186813+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776171990186_m2.jpg...
|
Slack
|
Aneliya Angelova, Nikolay Yankov, Steliyan Georgie Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev (DM) - Jiminny Inc - 2 new items - Slack...
|
True
|
NULL
|
monitor_2
|
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
platform-inner-team
ai-chapter
alerts
backend
confusion-clinic
curiosity_lab...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Jiminny Inc","depth":12,"bounds":{"left":0.5066406,"top":1.0,"width":0.0125,"height":-0.05486107},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Jiminny (Staging)","depth":12,"bounds":{"left":0.5066406,"top":1.0,"width":0.0125,"height":-0.090972185},"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,"bounds":{"left":0.52851564,"top":1.0,"width":0.0203125,"height":-0.048611164},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"bounds":{"left":0.5328125,"top":1.0,"width":0.01171875,"height":-0.08124995},"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"bounds":{"left":0.52851564,"top":1.0,"width":0.0203125,"height":-0.0958333},"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,"bounds":{"left":0.5679687,"top":1.0,"width":0.022265624,"height":-0.079861164},"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"bounds":{"left":0.5679687,"top":1.0,"width":0.020703126,"height":-0.079861164},"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"bounds":{"left":0.5679687,"top":1.0,"width":0.021484375,"height":-0.079861164},"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"bounds":{"left":0.5679687,"top":1.0,"width":0.034375,"height":-0.079861164},"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"bounds":{"left":0.5679687,"top":1.0,"width":0.028515626,"height":-0.079861164},"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"bounds":{"left":0.57421875,"top":1.0,"width":0.05234375,"height":-0.079861164},"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"bounds":{"left":0.57421875,"top":1.0,"width":0.026171874,"height":-0.079861164},"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"bounds":{"left":0.57421875,"top":1.0,"width":0.014453125,"height":-0.079861164},"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"bounds":{"left":0.57421875,"top":1.0,"width":0.021484375,"height":-0.079861164},"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"bounds":{"left":0.57421875,"top":1.0,"width":0.040625,"height":-0.079861164},"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"bounds":{"left":0.57421875,"top":1.0,"width":0.032421876,"height":-0.079861164},"role_description":"text"}]...
|
8798213051211072093
|
-1302641334107718037
|
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
platform-inner-team
ai-chapter
alerts
backend
confusion-clinic
curiosity_lab
PhpStormFV faVsco.js vViewNavigateCodeLaravelRefacton• #11894 on JY-18909-automated-reports-ask-jiminny~© ReportController.phpWindowProject v=IEOLUy<> Untitled Diagram.xmlIs vetur.config.jsM.WEbHOOK FILIERING IMPLEMEih External LibrariesE® Scratches and Consolesv M Database Consoles> AEUv & jiminny@localhostA console [jiminny@localhostA DI [jiminny@localhost]4 HS_local [iminny@localhosA SF [jiminny@localhost]A zoho_dev [jiminny@localhaV L PRODA console [PROD]consoe lPrODIA DI [PROD]> ÁQAÁ QAIL QAI PRODV A STAGINGA console [STAGING]A console_1 [STAGING]A uranus [STAGING]AddLayoutchuitles.ono© SendReportJob.phpC Team.phpAutomatedReportsCommand.phpAutomatedReportsRepository.php© TrackProviderInstalledEvent.php© CreateActivityLoggedEvent.phpRequestGenerateAskJiminnyReportJob.php© RequestGenerateReportJob.phpclass AutomatedReportsSendCommand extends Commandpublic function handle(): int© AutomatedReportsSendCommand.php x© Stage.phpAutomatedReportsService.php© CreateHeldActivityEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© AutomatedReportResult.php© AutomatedReport.phpforeach ($reportResults as SreportResult) {/** @var AutomatedReportResult $reportResult */+VaLidkeciplents = schis-›aucomatedkeportsservice-›getvalzdkeciplencusers(sreporckesult-›gecкeport())?if ($this->automatedReportsService->shouldSendReport($validRecipients, $reportResult->getGeneratedAt())) €nunse> oocer-onro seut.ue racrtk.Dispatching job', I'uuid' => $reportResult->getUuid(),servicesv DatabaseV LEUc consoev d jiminny@localhostc ho local4 SF 1 s 140 msV A PRODA console 3 sV A STAGING4, console 2 s 994 msDocker1):$this->dispatcher->dispatch(new SendReportJob($reportResult->getUvid()));recurn commandAclas:.success;1 usageprivate function handleForceSend(int $resultId): intOutputfiB jiminny.automated_report_results x Tx,41 rowsv00tTx: AutovFQGA®0- dda2X P Cc .* WDid Y÷ @uuid (UUID with time-low and time-high swapped) Y report_id T54 a46b03f8-5808-4425-842e-c73553cef22453 efd5f59e-4b5b-4609-bc35-5dea3eac9f1452 52fb9116-eca4-43a8-ac71-252c0c3ad0c951 cfd6bb99-4853-4C13-9f8e-a6af43e1727b50 5c9d7b33-b582-47d9-8770-a9fa31ffd68d40z00tere-ccac-4007-2050-000087122275v Filter rowsname Y38 Eastern Summary - 7 - 13 Apr 202637 Test 7 - 13 Apr 202637 Test 7 - 13 Apr 202636 Tuesday report - 13 Apr 202635 Test 6 - 13 Apr 20263o esT - 15 AOr 402048 [CREDIT_CARD]-8176-787526760562147 cc985e96-105b-4491-9a94-b9a72ddedd4246 8f89a4ef-d9e4-42c7-8920-e0a2ab72361f45 38817a7e-954d-41a2-822a-6c01f7f0007344 befbf9ac-9575-469b-80cb-f154a3b6a1ac43 3fa7c4c9-9714-474a-adf8-4e5f30417ddd42 ecdc1b3c-0a02-4d79-aa56-9fadc94f8d20uet4070a-0047-4700-0070-0462292004540 80e24006-7967-4c22-9bc1-5bf298206d3c39 058c1c38-4f61-4b06-8ede-5fb73f8942e738 a481a12f-84a1-4f9a-8da2-6281b011e369susoedto-oy-que-ctao-coootsctitda36 cf5b1219-6dc2-4854-9333-9bf0e6c96c6235 edc47759-160a-4f61-82fc-c8cdf5e5546434 6e3eed26-e7be-4019-b430-3f252aaa0d2css47050140-a005-4700-2201-0c0150552.00S4<nuu>33 Ask Jiminny test report - 13 Apr 202635 <null>33 Ask Jiminny test report - 13 Apr 202634 <null>33 Ask Jiminny test report - 13 Apr 202634 <null>ssAsk amnny test redort - o Aor 104033 Ask Jiminny test report - 8 Apr 202633 Ask Jiminny test report -8 Apr 202632 Shared with group - 1 Jul 2025 - 15 Apr 202632 <null>32 <null>2 Exec Summary - 1 - 28 Feb 2026 - ALU3 Product Feedback - 1 Jan - 28 Feb 2026 - UK Sales, Engineering4 Product Feedback - 1 Feb - 31 Mar 2026 - ALZ> 0Retro - Pattorm • in 54m100% C2Tue 14 Aor 16:06:30L AutomatedReportsCommandTestA HS_local [jiminny@localhost]Al console [EU]A console [STAGING] XGajiminny v©18 A 16 X 13E custom.log558559A1 A Y @l 560561562563504565566567568 v569= laravel.logA SF [jiminny@localhost]Tx: AutovPlaygroundvjoin teams t on r.team.id = t.idWHERE r. freguency = 'daily'and r.status = 1AND t.status ='active'AND (r.expires.at >= now() OR r.expires.at IS NULL):select * from automated_report_results where ceportaid IN (18, 33);select * from activity_searches where id = 10932;select * from activity_search_filters where activity_search_id = 10932;select * from automated_reports order by id desc;select * from automated_ report_results order by ia desg;select * from automated_report_results where cepontaid IN (37);SELECT * FROM automated_reports WHERE uuid_to_bin('18a06a75-afd2-476f-aadc-14d4057bdda2') = wwid;media_type Y ; Iparent_id TpdfpdfpdfpdfpdfpdfpdfpdfpdfpdfpdfpdfpdfpdfpdfpdfpdfIO status Y<null>shuLl<null><nulls<null><null><nul><null>cnullsCnu lut<null><nul1s<null><null><nili><null><null><null><null>cnult s<null><hULEID reason TeSVy+08,I payLoad T• {"user_question":"test", "call_ids":["54214o {"user_question":"Please make a summary foo {"user_question":"Please make a summary fo0 {"user_question":"test" "call_ids":["54214• {"user_question":"Please make a summary foo {"user_question":"Please make a summary fo1 <null>0 {"user_question":"test", "call_ids":["549641 <null>o {"user_question":"test", "call_ids":["549641 <null>o {"user_question":"test", "call_ids": ["549641 <null>o {"user_question":"test","call_ids":["549642 {"user_question"="test" "call_ids":["549642 {"user_question":"test", "call_ids":["54964• {"team_id":1,"request_id":"a481a12f-84a1-41 {"team_id":1,"request_id":"b38edf7d-7629-41 {"team_id":1, "request_id":"cf5b1219-6dc2-40 {"team_id":1, "request_id":"edc47759-160a-4o f"team_id":1, "request_id":"6e3eed26-e7be-4o {"team_id":1,"request_id":"4703bf4d-a8b3-4...
|
13987
|
|
81658
|
2170
|
63
|
2026-04-25T16:40:02.304182+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-25/1777 /Users/lukas/.screenpipe/data/data/2026-04-25/1777135202304_m1.jpg...
|
Firefox
|
DXP4800PLUS-B5F8 — Personal
|
True
|
nas.lakylak.xyz/desktop/#/
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
Inbox (7) - [EMAIL] - Gmail
(56) DXP4800PLUS-B5F8
Inbox (7) - [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
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
New Tab
MikroTik · CRS304-4XG-IN
MikroTik · CRS304-4XG-IN
New Tab
Customize sidebar
Open Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
1.5
KB/s
787
B/s
Files
Control Panel
Storage
App Center
Logs
Support
Task Manager
Universal Search
Music
Cloud Drives
Theater
Photos
Online Office
TextEdit
Virtual Machine
Downloads
DLNA
File Version Explorer
Security
Jellyfin-HT
SAN Manager
Vault
Snapshot
Comics
Sync & Backup
Control Panel
Search
Connection & Access
User Management
File Service
Device Connection
Domain/LDAP
Terminal
General
Hardware & Power
Time & Language
Network
Security
Indexing Service
Service
About
Update & Restore
SMB
FTP
NFS
Rsync
WebDAV
Advanced Settings
SMB settings
Enable SMB service
Enable SMB service
Workgroup
DOMOV
Advanced
Function description
After enabling, UGREEN NAS storage data can be connected and accessed with local account by SMB in LAN; if device name is required, please ensure that NAS device and local computer are in the same network segment.
How to use
1. Windows resource file manager access:
Enter address:
\\DXP4800PLUS-B5F8
or
\\[IP_ADDRESS]
...
|
[{"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":true},{"role":"AXRadioButton","text":"Inbox (7) - 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":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"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":"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":"MikroTik · CRS304-4XG-IN","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"MikroTik · CRS304-4XG-IN","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":"AXStaticText","text":"1.5","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KB/s","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"787","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"B/s","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Files","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Control Panel","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Storage","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"App Center","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Logs","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Support","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Task Manager","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Universal Search","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Music","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cloud Drives","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Theater","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Photos","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online Office","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TextEdit","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Virtual Machine","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Downloads","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DLNA","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"File Version Explorer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Security","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jellyfin-HT","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SAN Manager","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vault","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Snapshot","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Comics","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sync & Backup","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Control Panel","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search","depth":15,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Connection & Access","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"User Management","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"File Service","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Device Connection","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Domain/LDAP","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Terminal","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"General","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hardware & Power","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Time & Language","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Network","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Security","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Indexing Service","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Service","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"About","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Update & Restore","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SMB","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FTP","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NFS","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Rsync","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WebDAV","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Advanced Settings","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SMB settings","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Enable SMB service","depth":18,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enable SMB service","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Workgroup","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"DOMOV","depth":17,"value":"DOMOV","help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Advanced","depth":16,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"Function description","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"After enabling, UGREEN NAS storage data can be connected and accessed with local account by SMB in LAN; if device name is required, please ensure that NAS device and local computer are in the same network segment.","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"How to use","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Windows resource file manager access:","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Enter address:","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\\\DXP4800PLUS-B5F8","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\\\192.168.0.242","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8798029602434527191
|
5257729370824399373
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
Inbox (7) - [EMAIL] - Gmail
(56) DXP4800PLUS-B5F8
Inbox (7) - [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
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
New Tab
MikroTik · CRS304-4XG-IN
MikroTik · CRS304-4XG-IN
New Tab
Customize sidebar
Open Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
1.5
KB/s
787
B/s
Files
Control Panel
Storage
App Center
Logs
Support
Task Manager
Universal Search
Music
Cloud Drives
Theater
Photos
Online Office
TextEdit
Virtual Machine
Downloads
DLNA
File Version Explorer
Security
Jellyfin-HT
SAN Manager
Vault
Snapshot
Comics
Sync & Backup
Control Panel
Search
Connection & Access
User Management
File Service
Device Connection
Domain/LDAP
Terminal
General
Hardware & Power
Time & Language
Network
Security
Indexing Service
Service
About
Update & Restore
SMB
FTP
NFS
Rsync
WebDAV
Advanced Settings
SMB settings
Enable SMB service
Enable SMB service
Workgroup
DOMOV
Advanced
Function description
After enabling, UGREEN NAS storage data can be connected and accessed with local account by SMB in LAN; if device name is required, please ensure that NAS device and local computer are in the same network segment.
How to use
1. Windows resource file manager access:
Enter address:
\\DXP4800PLUS-B5F8
or
\\[IP_ADDRESS]
...
|
NULL
|
|
45065
|
952
|
3
|
2026-04-17T09:19:06.053194+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776417546053_m2.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorFVt PhpStormFileEditViewNavigateCodeLaravelRefactorFVtavsco.sv#11894 on JY-18909-automated-reports-ask-iminny K vProject vwebmozartwildbitD willdurandzbatesonphp autoload.phpeditorconfigToolsWindowHelp© AutomatedReportsService.php© SendReportJob.php© SendReportMailJob.php© ReportController.php© TokenBuilder.php© TeamSetupController.phpphp api.php• Filesystem.phpC Team.php© CreateHeldActivityEvent.phpTrackProviderInstalledEvent.php© RequestGenerateReportJob.php© OpportunitySyncTrait.php© Opportunity.php© InteractsWithPivotTable.php© OpportunityUpdated.php© OpportunityStageUpdated.php© OpportunityPendingAiAnalysisAfterStageChanged.phpC RunOpportunityAiAnalysis.phpT ImportBatchJobTrait.php© Service.php$stageX3Co W .*13/29TIT:trait OpportunitySyncTraitBSZMZMI9AYprivate function create0pportunity(string $crmId, array $properties,array $associations): ?Opportunityif ($opportunity->wasRecentlyCreated) {MatchActivitiesToNew0pportunity::dispatch($opportunity->getId());= custom.log= laravel.logA SF ljiminny@localhost](° scratch_1.jsonV connect.vueV Onboard.vueHs local liminnyalocalnostA console [EU]CrmEntityRepository.phpfii crm_configurations [EU]A console [(PROD]4 console [STAGING]env.clfclecenv.crrciecl"henuy.env.localenv.mierdle.env.nikilocal.env.otherenv.production.env.production-euenv.qa.env.qaienv.rootenv.staging757788789790791792793795return Sopportunity;/**orattrlbutes*Uooure exscino oodorcuncuellienoreono"es"lIxer.cache1 usage.php-cs-fixer.dist.phpprivate function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity.phpstorm.meta.php.phpunit.result.cacheprettierignorewindsurfrules_ide_helper.php_de_nelper_models.pnparusancomposer.soncomooser.lockdependency-checker.jsondev.jsonids.txtinfection.json.distNSTALLmdNERNAL WE.rOOK S-UP.moljiminny_storageicenses.moaketleраскаде-lock.,sor799800801802803804805800807808809810811812813814815816817818$accountId = $this->resolveAccountId($associations);$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);$stage = $businessProcess ? $this->resolveStage($businessProcess,$properties['dealstage'] ?? null): null;$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);$attributes = ['crm_configuration_id' => $this->config-›getid(),'crm_provider_id' => $crmId,$values = array_merge($attributes, $data);$opportunity = $this->crmEntityRepository->upsert0pportunity($attributes, $values);$this->importExternalFieldData($properties, $opportunity->getId());$this->updateOpportunityAssociations($opportunity, $associations);return Sopportunity;onostan.neon.alstphpstan-baseline.neonphpunit.xmlraw_sql_query.sql040private function resolveAccountId(array $associations): ?int{...}README.mdsonar-project.propertiestest.pyUntitled Diagram.xml839vetur.config.js840WEbnOOkhILICKING_ IMPL-MENIANIC841renalLoares842rarches anc consoles845Database Consoles844A EU845A console [EU]846« DEAL RISKS [EU]847A DI [EU]848private function buildOpportunityData(array $properties,Pint $accountId,?BusinessProcess $businessProcess,?Stage Ss): array {nownerlo = nuuur$profile = null;if (! empty($properties['hubspot_owner_id'])) {$ownerId = $properties['hubspot_owner_id'];$profile = $this->crmEntityRepository->findProfileByExternalId($this->config,(string) $ownerId);Helper Code will help IDE to understand your Laravel app code. // Generate // Don't Show Anymore (today 8:59)156315641566156715681569E1570E15751580158115821583-1584=1585158615871588158915901591159215951596F15915991600-1602-16051606=1607=1608E16091610Tx: AutovPlaygroundSa jiminny v# contact16779180 6655874 m026 49 422 V3 V103 ^ V:# contact 219247563 742723347700 - [EMAIL] 2026-COnDany 4170155 47150050504# deal 7100953 410150124747DCLELTCONCAT(u.id, CASE WHEN U.id = t.owner_id THEN(owner) ' EU.emallsa.*,t.owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable_idJOIN teams t 1.n<->1: on t.id = u.team_idWHERE u.team_id = 400 and sa.provider = 'hubspot':select * from features;select * from team features where feature id = 40%select x Tolteams where id = 556: # owner: 18101. crm: 477select * from crm_configurations where id = 477;SELECT * FROM users WHERE id = 18101;SELECTCONCAT(u.id, CASE WHEN U.id = t.owner_id THEN(owner)'Eu.email,sa.*,t. owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable_idJOIN teams t 1.n<->1: on t.id = u.team_idWHERE u.team_id = 556 and sa.provider = 'integration-app';select * from opportunities where id = 7594349;select * from opportunity_stages where opportunity_id = 759434select * from business_processes where id = 6024;select * from business_process_stages where stage_id = 16352;select * from business_process_stages where business_process_]select * from stages where team_id = 459;select * from teams where id = 459;DELEEITCONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner) '7u.email,sa.*,T. owner 10 rkuм soclal accounus soJuin users u on u.la = sa.soclable 10JOIN teams t 1.n<->1: on t.id = u.team_idVHERE u.team_id = 459 and sa.provider = 'hubspot' :SELECT crm_provider_id, COUNT(*) as cnt, GROUP_CONCAT(id ORDERFROM stagesWHERE team_id = 459 AND type = 'opportunity'GROUP BY crm_provider_idHAVING cnt > 1:| 2> 0Support Daily • in 2h 41 mAL AutomatedReportsCommandTestv100% 1Z78 • Fri 17 Apr 12:19:05CascadeAutomated Report RetrDebugging Opportunit3. Caches null for that cacheKey4. Returns nullBack in buildOpportunityData():© OpportunitySyncTrait.php:893-895+D..w1lsstade K$datal'stage_id'] = $stage→>id;stage_id is NOT included in sdata — it's simply omitted.Then in upsertOpportunity):1CrmEntitvRenositorv.nhn:334-338if ($opportunity === null) &popporlundly= ooportundlyccredtelsuala1 else {sonportunary->uodatel soara.sopporcunicy->update sdata is called Without stage 1d in sdata. cloquent's updace oniy serswhat's in the array — so the existing stage_id on the opportunity is preserved. No dirty flag, no OpportunityStageUpdated event.So stage_id oscillation is NOT caused by a missing stageA missing/null stage simply skips the stage_id write - it won't cause oscillation.The actual oscillation cause given your dataYour pipeline has stage 20243 added 2025-09-22 — months after the others (2025-04-02). This stronglysuccestsaHubSpot is returning a dealstage value that alternates between two different CRM provider IDs -meaning HubSpot itself keeps changing the deal's stage. The most likely reason: the UpdateStage job iswriting back a stage to Hubspot, Hubspottires a webnook, Jiminny re-syncs and writes the new stagelocally, which fires OpportunityStageUpdated, which triggers Al automation analysis, which via UpdateCrmFieldAction calls syncOpportunity() again and possibly writes back to HubSpot again.une kev clol. wareh oo to tinc this l00p."(HubSpot) Stage does not exist =>'If you see this for the oscillating opportunity, it means resolveStage is failing. But if you don't see it, thestages ARt being round - meaning Hudspot is genuinely returning alternating dealstage values on eachwebhook.Ine most targered check• salSELECT os-stage_id, s.crm_provider_id, s.name, COUNT(*) as cntFROM opportunity stages osJOIN stages s ON s. id = os.stage_idwhcke os.opporcunity 10 =<your opportunity id>GROUP BY os-stage_id, s.crm_provider_id, s.nameORDER BY cnt DESC;If you see 2 or more stages alternating with equal counts — it's a feedback loop. If you see all 8 stagesroughly equally — it's importStages cycling through all stages and something is assigning each one.ta all**Ask anything (24L)+ <> Code Claude Sonnet 4.6winasur leamsuir-o...
|
NULL
|
8797702825730887508
|
NULL
|
visual_change
|
ocr
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorFVt PhpStormFileEditViewNavigateCodeLaravelRefactorFVtavsco.sv#11894 on JY-18909-automated-reports-ask-iminny K vProject vwebmozartwildbitD willdurandzbatesonphp autoload.phpeditorconfigToolsWindowHelp© AutomatedReportsService.php© SendReportJob.php© SendReportMailJob.php© ReportController.php© TokenBuilder.php© TeamSetupController.phpphp api.php• Filesystem.phpC Team.php© CreateHeldActivityEvent.phpTrackProviderInstalledEvent.php© RequestGenerateReportJob.php© OpportunitySyncTrait.php© Opportunity.php© InteractsWithPivotTable.php© OpportunityUpdated.php© OpportunityStageUpdated.php© OpportunityPendingAiAnalysisAfterStageChanged.phpC RunOpportunityAiAnalysis.phpT ImportBatchJobTrait.php© Service.php$stageX3Co W .*13/29TIT:trait OpportunitySyncTraitBSZMZMI9AYprivate function create0pportunity(string $crmId, array $properties,array $associations): ?Opportunityif ($opportunity->wasRecentlyCreated) {MatchActivitiesToNew0pportunity::dispatch($opportunity->getId());= custom.log= laravel.logA SF ljiminny@localhost](° scratch_1.jsonV connect.vueV Onboard.vueHs local liminnyalocalnostA console [EU]CrmEntityRepository.phpfii crm_configurations [EU]A console [(PROD]4 console [STAGING]env.clfclecenv.crrciecl"henuy.env.localenv.mierdle.env.nikilocal.env.otherenv.production.env.production-euenv.qa.env.qaienv.rootenv.staging757788789790791792793795return Sopportunity;/**orattrlbutes*Uooure exscino oodorcuncuellienoreono"es"lIxer.cache1 usage.php-cs-fixer.dist.phpprivate function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity.phpstorm.meta.php.phpunit.result.cacheprettierignorewindsurfrules_ide_helper.php_de_nelper_models.pnparusancomposer.soncomooser.lockdependency-checker.jsondev.jsonids.txtinfection.json.distNSTALLmdNERNAL WE.rOOK S-UP.moljiminny_storageicenses.moaketleраскаде-lock.,sor799800801802803804805800807808809810811812813814815816817818$accountId = $this->resolveAccountId($associations);$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);$stage = $businessProcess ? $this->resolveStage($businessProcess,$properties['dealstage'] ?? null): null;$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);$attributes = ['crm_configuration_id' => $this->config-›getid(),'crm_provider_id' => $crmId,$values = array_merge($attributes, $data);$opportunity = $this->crmEntityRepository->upsert0pportunity($attributes, $values);$this->importExternalFieldData($properties, $opportunity->getId());$this->updateOpportunityAssociations($opportunity, $associations);return Sopportunity;onostan.neon.alstphpstan-baseline.neonphpunit.xmlraw_sql_query.sql040private function resolveAccountId(array $associations): ?int{...}README.mdsonar-project.propertiestest.pyUntitled Diagram.xml839vetur.config.js840WEbnOOkhILICKING_ IMPL-MENIANIC841renalLoares842rarches anc consoles845Database Consoles844A EU845A console [EU]846« DEAL RISKS [EU]847A DI [EU]848private function buildOpportunityData(array $properties,Pint $accountId,?BusinessProcess $businessProcess,?Stage Ss): array {nownerlo = nuuur$profile = null;if (! empty($properties['hubspot_owner_id'])) {$ownerId = $properties['hubspot_owner_id'];$profile = $this->crmEntityRepository->findProfileByExternalId($this->config,(string) $ownerId);Helper Code will help IDE to understand your Laravel app code. // Generate // Don't Show Anymore (today 8:59)156315641566156715681569E1570E15751580158115821583-1584=1585158615871588158915901591159215951596F15915991600-1602-16051606=1607=1608E16091610Tx: AutovPlaygroundSa jiminny v# contact16779180 6655874 m026 49 422 V3 V103 ^ V:# contact 219247563 742723347700 - [EMAIL] 2026-COnDany 4170155 47150050504# deal 7100953 410150124747DCLELTCONCAT(u.id, CASE WHEN U.id = t.owner_id THEN(owner) ' EU.emallsa.*,t.owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable_idJOIN teams t 1.n<->1: on t.id = u.team_idWHERE u.team_id = 400 and sa.provider = 'hubspot':select * from features;select * from team features where feature id = 40%select x Tolteams where id = 556: # owner: 18101. crm: 477select * from crm_configurations where id = 477;SELECT * FROM users WHERE id = 18101;SELECTCONCAT(u.id, CASE WHEN U.id = t.owner_id THEN(owner)'Eu.email,sa.*,t. owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable_idJOIN teams t 1.n<->1: on t.id = u.team_idWHERE u.team_id = 556 and sa.provider = 'integration-app';select * from opportunities where id = 7594349;select * from opportunity_stages where opportunity_id = 759434select * from business_processes where id = 6024;select * from business_process_stages where stage_id = 16352;select * from business_process_stages where business_process_]select * from stages where team_id = 459;select * from teams where id = 459;DELEEITCONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner) '7u.email,sa.*,T. owner 10 rkuм soclal accounus soJuin users u on u.la = sa.soclable 10JOIN teams t 1.n<->1: on t.id = u.team_idVHERE u.team_id = 459 and sa.provider = 'hubspot' :SELECT crm_provider_id, COUNT(*) as cnt, GROUP_CONCAT(id ORDERFROM stagesWHERE team_id = 459 AND type = 'opportunity'GROUP BY crm_provider_idHAVING cnt > 1:| 2> 0Support Daily • in 2h 41 mAL AutomatedReportsCommandTestv100% 1Z78 • Fri 17 Apr 12:19:05CascadeAutomated Report RetrDebugging Opportunit3. Caches null for that cacheKey4. Returns nullBack in buildOpportunityData():© OpportunitySyncTrait.php:893-895+D..w1lsstade K$datal'stage_id'] = $stage→>id;stage_id is NOT included in sdata — it's simply omitted.Then in upsertOpportunity):1CrmEntitvRenositorv.nhn:334-338if ($opportunity === null) &popporlundly= ooportundlyccredtelsuala1 else {sonportunary->uodatel soara.sopporcunicy->update sdata is called Without stage 1d in sdata. cloquent's updace oniy serswhat's in the array — so the existing stage_id on the opportunity is preserved. No dirty flag, no OpportunityStageUpdated event.So stage_id oscillation is NOT caused by a missing stageA missing/null stage simply skips the stage_id write - it won't cause oscillation.The actual oscillation cause given your dataYour pipeline has stage 20243 added 2025-09-22 — months after the others (2025-04-02). This stronglysuccestsaHubSpot is returning a dealstage value that alternates between two different CRM provider IDs -meaning HubSpot itself keeps changing the deal's stage. The most likely reason: the UpdateStage job iswriting back a stage to Hubspot, Hubspottires a webnook, Jiminny re-syncs and writes the new stagelocally, which fires OpportunityStageUpdated, which triggers Al automation analysis, which via UpdateCrmFieldAction calls syncOpportunity() again and possibly writes back to HubSpot again.une kev clol. wareh oo to tinc this l00p."(HubSpot) Stage does not exist =>'If you see this for the oscillating opportunity, it means resolveStage is failing. But if you don't see it, thestages ARt being round - meaning Hudspot is genuinely returning alternating dealstage values on eachwebhook.Ine most targered check• salSELECT os-stage_id, s.crm_provider_id, s.name, COUNT(*) as cntFROM opportunity stages osJOIN stages s ON s. id = os.stage_idwhcke os.opporcunity 10 =<your opportunity id>GROUP BY os-stage_id, s.crm_provider_id, s.nameORDER BY cnt DESC;If you see 2 or more stages alternating with equal counts — it's a feedback loop. If you see all 8 stagesroughly equally — it's importStages cycling through all stages and something is assigning each one.ta all**Ask anything (24L)+ <> Code Claude Sonnet 4.6winasur leamsuir-o...
|
45063
|
|
10881
|
215
|
56
|
2026-04-14T09:02:33.159090+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157353159_m2.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormProject vFileEditFV faVsco.js vViewNavigat PhpStormProject vFileEditFV faVsco.js vViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-iminny K vToolsWindowHelpProphetAiv D Reports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php© Usage.phpD Slack_leamsD TracksO TranscriptionO TwilioD UsersVocabularyDZoom© CoachingFeedbacksUpr© Command.php© CreateDatabaseUsers.pc Daraoase oecountoi© DeleteOldAiCrmNotesC:© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen© FeatureFlagsHelper.php© FixCrossTenantlssues.p(c) -ushro espermissionsa(e) Generatelnterna wepho• GroupSetDefaultLangua© HelperTruncateCoachin© HubspotJournalPollingC© HubspotWebhookServic©ImportRecording.php© ImportUsersFromCsvFil© IterateUsersCommand.f© JiminnyCacheClearCom© JiminnyDebugCommanc© JiminnySetEncryptedTo© JiminnyTokenInfoCommMakeslackLvecoaching(c Manacescimror eam.o© MarkBranchForEnvironn© MuteOrganizerChannel.© PhpApm.php© PropagateCoachingFeer© PurgeConferences.php© PurgeSoftDeletedOppor© PurgeSyncBatchesCom(e Recalculatebealkisksco(c) Removebe eremarkersc(e) Remove-xoiredNudoes© RemoveUnusedParticip:© ResetElasticSearch.php© RestoreActivityCrmProv© RestoreActivityTypeCor© ReportController.phpJiminnyDeouecommana.ong© AutomatedReportsSendCommand.phpC AutomatedReportsRepository.phpC AutomatedReportsService.php(c CrealenelaAcuiviyevent.onoAutomaleakeportscommana.ong• TrackProviderInstalledEvent.php© RequestGenerateAskJiminnyReportJob.php© AddLayoutEntities.php© Team.phpCreateActivityLoggedEvent.php© RequestGenerateReportJob.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© AutomatedReportResult.phpclass AutomatedReportsCommand extends Commandprivate function getReportById(string $reportId): Collection135138140141142E custom.log= laravel.logA SF [jiminny@localhost]A HS_local [jiminny@localhost]A console (PROD]4 console [EU]I console [STAGING)) AskJiminnyReportActivityService.php x© RequestGenerateAskJiminnyReportJobTestX281лclass AskJiminnyReportActivi1451461471481491501511521531541551561571581591601611O 411051641651661671681691701711721741751761771781791801811821185184185186187188189190if ($report === null) ($this->logger->warning(self::LOG_PREFIX •|' Report not found for --report-id'. ['reportid' => $reportid]):$this->warn( string: "Report not found: {$reportId}");return collect();if (! Sreport->getStatus() €$this->Logger->warning(self::LOG_PREFIX*' Report is inactive, processing anyway (manual override)'. ['reportId' => SreportId,Перогсбва+ фероги-дена!ID:$this->warn( string: "Report is inactive - processing anyway (manual override). D:$team = $report->getTeam();if |($team->getStatus(| |== Team::STATUS_ACTIVE) |d$this->logger->warning(self::LOG_PREFIXTeam is not active, processing anyway (manual override)'.d'reportId' => SreportId,'reportUvid' => $report->getUvid(),'teamId' => $report->getTeamId().=> $team->getStatus(),ID:$this->warn ( string: "Team #[$report->getTeamId()} is not active - processing anyway (manual override) . "):if ($report->isExpiredO) {$this->Logger->warning(self:|LOG_PREFIX |.||' Report is expired, processing anyway (manual override)|Cl'reportId' => SreportId,=> $report->getUvid(),'expiresAt'=> $report->getExpiresAt()?->toDateString().1D:$this-›warn( string: |'Report is expired (expires_at: |'|| Sreport->getExpiresAt()?->toDateString( |.||b - processing anyway (manual overrid47Enow = Carbon: :now():$frequency = $report->getFrequencyO);$wouldRunToday = match ($frequency) {AutomatedReportsService::FREQUENCY_DAILY => true,AutomatedReportsService::FREQUENCY_WEEKLY => $now->isMonday(),AutomatedReportsService::FREQUENCY_MONTHLY => $now->day === 1,AutomatedReportsService::FREQUENCY_QUARTERLY |→> $now->day === 1 && in_array($now->month, [1, 4, 7, 10],strict: true),default = false,СД СЛif (! $wouldRunToday) €$this->Rogger->info(seLf::LOG_PREFIX •|' Report frequency would not run today, processing anyway (manual override)". E'reportId' => $reportId,=> $report->getUuid(,=> $frequency,1):$this->warn( string: "Report fiteqenGydits +$t v Accept File *~ VOXL RejeCtiFileunatoday, poodessiny anyway (manual override).");Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)private const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate::ActivityUpdatedDate:ActivityUpdatedDate:ClosingPeriodFilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly Log)4...3* Fetch activity IDs fo* Date filters stored* no date constraint .* Creturn string[] Acti*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge($req$user->getTimezo);$filterSet = $this->$activityIds = $this$this->logger->info('saved_search_id'user_id'= Sus'activity_count'1);return $activityIds;, 0lablSupport Daily - in 2h 58mA100% C•Tue 14 Apr 12:02:33• RequestGenerateAskJiminnyReportJobTest-CascadeFixing ReportControlleAutomated Report Mar3 Automated Report Lp#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucomaceakepo rtscommand.onpRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be before the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1vone. oummary or changes.AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns empty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + ternninal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +81 -5 ›Ask anything (&AL)+ <> CodeClaude Sonnet 4.6Reject allAccept allwinasun leams180:50uir-o( 4 spaces...
|
NULL
|
8797696120738101802
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormProject vFileEditFV faVsco.js vViewNavigat PhpStormProject vFileEditFV faVsco.js vViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-iminny K vToolsWindowHelpProphetAiv D Reports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php© Usage.phpD Slack_leamsD TracksO TranscriptionO TwilioD UsersVocabularyDZoom© CoachingFeedbacksUpr© Command.php© CreateDatabaseUsers.pc Daraoase oecountoi© DeleteOldAiCrmNotesC:© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen© FeatureFlagsHelper.php© FixCrossTenantlssues.p(c) -ushro espermissionsa(e) Generatelnterna wepho• GroupSetDefaultLangua© HelperTruncateCoachin© HubspotJournalPollingC© HubspotWebhookServic©ImportRecording.php© ImportUsersFromCsvFil© IterateUsersCommand.f© JiminnyCacheClearCom© JiminnyDebugCommanc© JiminnySetEncryptedTo© JiminnyTokenInfoCommMakeslackLvecoaching(c Manacescimror eam.o© MarkBranchForEnvironn© MuteOrganizerChannel.© PhpApm.php© PropagateCoachingFeer© PurgeConferences.php© PurgeSoftDeletedOppor© PurgeSyncBatchesCom(e Recalculatebealkisksco(c) Removebe eremarkersc(e) Remove-xoiredNudoes© RemoveUnusedParticip:© ResetElasticSearch.php© RestoreActivityCrmProv© RestoreActivityTypeCor© ReportController.phpJiminnyDeouecommana.ong© AutomatedReportsSendCommand.phpC AutomatedReportsRepository.phpC AutomatedReportsService.php(c CrealenelaAcuiviyevent.onoAutomaleakeportscommana.ong• TrackProviderInstalledEvent.php© RequestGenerateAskJiminnyReportJob.php© AddLayoutEntities.php© Team.phpCreateActivityLoggedEvent.php© RequestGenerateReportJob.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© AutomatedReportResult.phpclass AutomatedReportsCommand extends Commandprivate function getReportById(string $reportId): Collection135138140141142E custom.log= laravel.logA SF [jiminny@localhost]A HS_local [jiminny@localhost]A console (PROD]4 console [EU]I console [STAGING)) AskJiminnyReportActivityService.php x© RequestGenerateAskJiminnyReportJobTestX281лclass AskJiminnyReportActivi1451461471481491501511521531541551561571581591601611O 411051641651661671681691701711721741751761771781791801811821185184185186187188189190if ($report === null) ($this->logger->warning(self::LOG_PREFIX •|' Report not found for --report-id'. ['reportid' => $reportid]):$this->warn( string: "Report not found: {$reportId}");return collect();if (! Sreport->getStatus() €$this->Logger->warning(self::LOG_PREFIX*' Report is inactive, processing anyway (manual override)'. ['reportId' => SreportId,Перогсбва+ фероги-дена!ID:$this->warn( string: "Report is inactive - processing anyway (manual override). D:$team = $report->getTeam();if |($team->getStatus(| |== Team::STATUS_ACTIVE) |d$this->logger->warning(self::LOG_PREFIXTeam is not active, processing anyway (manual override)'.d'reportId' => SreportId,'reportUvid' => $report->getUvid(),'teamId' => $report->getTeamId().=> $team->getStatus(),ID:$this->warn ( string: "Team #[$report->getTeamId()} is not active - processing anyway (manual override) . "):if ($report->isExpiredO) {$this->Logger->warning(self:|LOG_PREFIX |.||' Report is expired, processing anyway (manual override)|Cl'reportId' => SreportId,=> $report->getUvid(),'expiresAt'=> $report->getExpiresAt()?->toDateString().1D:$this-›warn( string: |'Report is expired (expires_at: |'|| Sreport->getExpiresAt()?->toDateString( |.||b - processing anyway (manual overrid47Enow = Carbon: :now():$frequency = $report->getFrequencyO);$wouldRunToday = match ($frequency) {AutomatedReportsService::FREQUENCY_DAILY => true,AutomatedReportsService::FREQUENCY_WEEKLY => $now->isMonday(),AutomatedReportsService::FREQUENCY_MONTHLY => $now->day === 1,AutomatedReportsService::FREQUENCY_QUARTERLY |→> $now->day === 1 && in_array($now->month, [1, 4, 7, 10],strict: true),default = false,СД СЛif (! $wouldRunToday) €$this->Rogger->info(seLf::LOG_PREFIX •|' Report frequency would not run today, processing anyway (manual override)". E'reportId' => $reportId,=> $report->getUuid(,=> $frequency,1):$this->warn( string: "Report fiteqenGydits +$t v Accept File *~ VOXL RejeCtiFileunatoday, poodessiny anyway (manual override).");Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)private const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate::ActivityUpdatedDate:ActivityUpdatedDate:ClosingPeriodFilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly Log)4...3* Fetch activity IDs fo* Date filters stored* no date constraint .* Creturn string[] Acti*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge($req$user->getTimezo);$filterSet = $this->$activityIds = $this$this->logger->info('saved_search_id'user_id'= Sus'activity_count'1);return $activityIds;, 0lablSupport Daily - in 2h 58mA100% C•Tue 14 Apr 12:02:33• RequestGenerateAskJiminnyReportJobTest-CascadeFixing ReportControlleAutomated Report Mar3 Automated Report Lp#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucomaceakepo rtscommand.onpRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be before the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1vone. oummary or changes.AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns empty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + ternninal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +81 -5 ›Ask anything (&AL)+ <> CodeClaude Sonnet 4.6Reject allAccept allwinasun leams180:50uir-o( 4 spaces...
|
NULL
|
|
8820
|
171
|
23
|
2026-04-14T07:06:47.713323+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776150407713_m2.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpPlatform Sprint 1 Q2 - Platform Tea( SRD-6779 | JY-20632 | Unable Xsyts/ss evaluation tor al activity(8 Jiminnyg Ask Jiminny test report - 8 Apr 20)Service-Desk - Queues - Platform+ New Tabennuo.com mminny dop oull iooo chianees~ Google Gemini...GeminiPROHi LukasWhere should westart?Create image* Create musicWrite anythingBoost my dayHelp me learnl1 OpenSRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO #11935All commitsyalokin-jiminny. wants to merge 5 commits into master from SRD-6779-sidekick-SS0• Filter files...• F app/GuardsE Sso.phpv = tests~ E Feature/ServiceProvidersĐ SsoTest.php• Unit/Guards* SsoTest.phpv app/Guards/Sso.php 0 4ase samamy moae troser,use Suides Sam 2Events SianedIn:class S50public function loginUser(SignedIn $event): void$samlUser = sevent->getSaml2User();15 -// Find user by email$user = User::where('email', $samlUser->getUserId())->first();18 -if (suser === null) {return;21 -if ($user->status !== User::STATUS_ACTIVE) €• Enter a prompt for Gemini+Pro vSummarize pagerecurn;25 -// Login a user.Auth: : login(Suser);v tests/Feature/ServiceProviders/SsoTest.php M@@ -3,6 +3,7 canamespace Tests\Feature\ServiceProviders:use 1eluminale support racdaes Lache.use Jiminny|Component\Saml2\FederationMetadata;22 + ]2425283536:38 +)4041+Support Daily • in 4h 54mA100% CS8 • Tue 14 Apr 10:06:47=C0 3 Vieweo• Awallind aporovall+23 -4 UUULViewedUOL ULILINY VI+ use Illuminate\Support\Facades\Log;use Suides Sam 2Events SianedIn:Class ssopublic Tuncrion loanuser Slqneain sevent: vold$samlUser = Sevent->qetSaml2User0:$email = null;// Find user by NameID (works when name_id_format is emailAddress)$user = User::where('email', $samlUser->getUserId())->first();// Fallback: try email from SAML attributes (for persistent name_id_format)if ($user === null) {$attributes = $samlUser->getAttributes();semall = sacuribures emall.0.?? $attributes ['emailAddress'] [0]?? $attributes ['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'] [0]?? $attributes['Email'][0]?sattr1butes 'ma1l'|10i?? null;if ($email != null) €$user = User::where('email', $email)->first():if (suser === null || $user->status != User: : STATUS_ACTIVE) €Log::warning('[SSO] Login failed',l'name_id' = $samlUser→>getUserId(),emall_used = semall,'reason' => Suser === null ? 'user_not_found' : "user_inactive',recurn;Auth: : login(Suser);+151 00000• Viewednamesoace lests reature servicerrovlaers.use 1eluminale support rdcdaes Lache.+ use Illuminate\Support\Facades\Log;use Jiminny\Component\Saml2\FederationMetadata;...
|
NULL
|
8797618972646842200
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpPlatform Sprint 1 Q2 - Platform Tea( SRD-6779 | JY-20632 | Unable Xsyts/ss evaluation tor al activity(8 Jiminnyg Ask Jiminny test report - 8 Apr 20)Service-Desk - Queues - Platform+ New Tabennuo.com mminny dop oull iooo chianees~ Google Gemini...GeminiPROHi LukasWhere should westart?Create image* Create musicWrite anythingBoost my dayHelp me learnl1 OpenSRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO #11935All commitsyalokin-jiminny. wants to merge 5 commits into master from SRD-6779-sidekick-SS0• Filter files...• F app/GuardsE Sso.phpv = tests~ E Feature/ServiceProvidersĐ SsoTest.php• Unit/Guards* SsoTest.phpv app/Guards/Sso.php 0 4ase samamy moae troser,use Suides Sam 2Events SianedIn:class S50public function loginUser(SignedIn $event): void$samlUser = sevent->getSaml2User();15 -// Find user by email$user = User::where('email', $samlUser->getUserId())->first();18 -if (suser === null) {return;21 -if ($user->status !== User::STATUS_ACTIVE) €• Enter a prompt for Gemini+Pro vSummarize pagerecurn;25 -// Login a user.Auth: : login(Suser);v tests/Feature/ServiceProviders/SsoTest.php M@@ -3,6 +3,7 canamespace Tests\Feature\ServiceProviders:use 1eluminale support racdaes Lache.use Jiminny|Component\Saml2\FederationMetadata;22 + ]2425283536:38 +)4041+Support Daily • in 4h 54mA100% CS8 • Tue 14 Apr 10:06:47=C0 3 Vieweo• Awallind aporovall+23 -4 UUULViewedUOL ULILINY VI+ use Illuminate\Support\Facades\Log;use Suides Sam 2Events SianedIn:Class ssopublic Tuncrion loanuser Slqneain sevent: vold$samlUser = Sevent->qetSaml2User0:$email = null;// Find user by NameID (works when name_id_format is emailAddress)$user = User::where('email', $samlUser->getUserId())->first();// Fallback: try email from SAML attributes (for persistent name_id_format)if ($user === null) {$attributes = $samlUser->getAttributes();semall = sacuribures emall.0.?? $attributes ['emailAddress'] [0]?? $attributes ['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'] [0]?? $attributes['Email'][0]?sattr1butes 'ma1l'|10i?? null;if ($email != null) €$user = User::where('email', $email)->first():if (suser === null || $user->status != User: : STATUS_ACTIVE) €Log::warning('[SSO] Login failed',l'name_id' = $samlUser→>getUserId(),emall_used = semall,'reason' => Suser === null ? 'user_not_found' : "user_inactive',recurn;Auth: : login(Suser);+151 00000• Viewednamesoace lests reature servicerrovlaers.use 1eluminale support rdcdaes Lache.+ use Illuminate\Support\Facades\Log;use Jiminny\Component\Saml2\FederationMetadata;...
|
NULL
|
|
228
|
7
|
6
|
2026-04-09T17:20:02.580471+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-09/1775 /Users/lukas/.screenpipe/data/data/2026-04-09/1775755202580_m1.jpg...
|
iTerm2
|
screenpipe"
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
ggml_metal_init: found device: Apple M1
ggml_metal ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-04-09T20:16:55.543375Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
zsh: terminated npx screenpipe@latest record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ npx screenpipe@latest record
detected hardware tier: Mid
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-04-09T20:18:41.912236Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-09T20:18:42.686011Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-09T20:18:42.687457Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-09T20:18:42.687473Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-09T20:18:42.687899Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-09T20:18:42.900414Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-09T20:18:42.900475Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-09T20:18:42.900422Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-09T20:18:42.900897Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-09T20:18:42.901174Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-09T20:18:42.901736Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-09T20:18:42.901893Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-09T20:18:42.902076Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-09T20:18:42.903039Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-09T20:18:42.903068Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ no monitors available │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
│ │ System Audio (output) │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ npx screenpipe@latest record --disable-audio
detected hardware tier: Mid
checking permissions...
screen recording: ok
accessibility: ok
2026-04-09T20:19:52.412195Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-09T20:19:53.055756Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-09T20:19:53.058756Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-09T20:19:53.059017Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-09T20:19:53.059054Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-09T20:19:53.058846Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-09T20:19:53.059166Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-09T20:19:53.059575Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-09T20:19:53.059559Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-09T20:19:53.059832Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-09T20:19:53.060406Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-09T20:19:53.060587Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-09T20:19:53.060779Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-09T20:19:53.061707Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-09T20:19:53.061733Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
p...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"ggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-04-09T20:16:55.543375Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ npx screenpipe@latest record\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-04-09T20:18:41.912236Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-09T20:18:42.686011Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-09T20:18:42.687457Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-09T20:18:42.687473Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-09T20:18:42.687899Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-09T20:18:42.900414Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-09T20:18:42.900475Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-09T20:18:42.900422Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-09T20:18:42.900897Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-09T20:18:42.901174Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-09T20:18:42.901736Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-09T20:18:42.901893Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-09T20:18:42.902076Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-09T20:18:42.903039Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-09T20:18:42.903068Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ no monitors available │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-04-09T20:18:42.906668Z INFO screenpipe: starting UI event capture\n2026-04-09T20:18:42.904980Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n2026-04-09T20:18:42.908468Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-09T20:18:42.911739Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-09T20:18:42.921315Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-09T20:18:42.935181Z INFO screenpipe_engine::ui_recorder: UI recording session started: 9f2b6757-0e2b-45c7-bfae-9666e6db34c5\n2026-04-09T20:18:42.935268Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-09T20:18:42.935303Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-08 17:18:42.935300 UTC to 2026-04-09 17:18:42.935300 UTC)\n2026-04-09T20:18:42.935997Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-09T20:18:42.941704Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-09T20:18:42.946772Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-09T20:18:42.989922Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 209 frame entries, coverage from 2026-04-08 17:18:42.935300 UTC\n2026-04-09T20:18:43.291350Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-09T20:18:43.291384Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-09T20:18:43.291397Z INFO screenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_3008x1253_-813,-1253) — not in allowed list\n2026-04-09T20:18:43.291406Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-09T20:18:43.291520Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-09T20:18:44.032530Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-09T20:18:47.449731Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=210, dur=67ms\n2026-04-09T20:18:47.939991Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-09T20:18:47.940309Z INFO screenpipe: local retention auto-enabled (14 days)\n2026-04-09T20:18:52.910326Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-04-09T20:18:52.910382Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-04-09T20:18:52.910389Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 0.013 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-04-09T20:18:53.001173Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-04-09T20:18:53.005400Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-04-09T20:18:53.005773Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-04-09T20:18:53.005828Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-04-09T20:18:54.300159Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-04-09T20:18:54.300247Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (30s segments)\n2026-04-09T20:18:54.947320Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-04-09T20:18:54.947365Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (30s segments)\n2026-04-09T20:18:58.125886Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2732202531443799157, trigger=clipboard)\n2026-04-09T20:19:20.963903Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6279845026343263330, trigger=click)\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ npx screenpipe@latest record --disable-audio\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-09T20:19:52.412195Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-09T20:19:53.055756Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-09T20:19:53.058756Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-09T20:19:53.059017Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-09T20:19:53.059054Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-09T20:19:53.058846Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-09T20:19:53.059166Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-09T20:19:53.059575Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-09T20:19:53.059559Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-09T20:19:53.059832Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-09T20:19:53.060406Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-09T20:19:53.060587Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-09T20:19:53.060779Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-09T20:19:53.061707Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-09T20:19:53.061733Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ no monitors available │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-04-09T20:19:53.063534Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n2026-04-09T20:19:53.063553Z INFO screenpipe: starting UI event capture\n2026-04-09T20:19:53.074282Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-09T20:19:53.079729Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-09T20:19:53.084110Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-09T20:19:53.100563Z INFO screenpipe_engine::ui_recorder: UI recording session started: f26a4920-75f9-4a03-a6eb-151ca5c07685\n2026-04-09T20:19:53.100584Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-09T20:19:53.100646Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-08 17:19:53.100644 UTC to 2026-04-09 17:19:53.100644 UTC)\n2026-04-09T20:19:53.102360Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-09T20:19:53.110846Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-09T20:19:53.112584Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 224 frame entries, coverage from 2026-04-08 17:19:53.100644 UTC\n2026-04-09T20:19:53.120158Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-09T20:19:53.468211Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-09T20:19:53.468238Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-09T20:19:53.468248Z INFO screenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_3008x1253_-813,-1253) — not in allowed list\n2026-04-09T20:19:53.468256Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-09T20:19:53.468299Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-09T20:19:54.270276Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-09T20:19:54.417323Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=225, dur=69ms\n2026-04-09T20:19:58.104767Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-09T20:19:58.105051Z INFO screenpipe: local retention auto-enabled (14 days)\n2026-04-09T20:19:59.556143Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4063491422687871710, trigger=visual_change)","depth":4,"value":"ggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-04-09T20:16:55.543375Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ npx screenpipe@latest record\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-04-09T20:18:41.912236Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-09T20:18:42.686011Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-09T20:18:42.687457Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-09T20:18:42.687473Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-09T20:18:42.687899Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-09T20:18:42.900414Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-09T20:18:42.900475Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-09T20:18:42.900422Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-09T20:18:42.900897Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-09T20:18:42.901174Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-09T20:18:42.901736Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-09T20:18:42.901893Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-09T20:18:42.902076Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-09T20:18:42.903039Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-09T20:18:42.903068Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ no monitors available │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-04-09T20:18:42.906668Z INFO screenpipe: starting UI event capture\n2026-04-09T20:18:42.904980Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n2026-04-09T20:18:42.908468Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-09T20:18:42.911739Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-09T20:18:42.921315Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-09T20:18:42.935181Z INFO screenpipe_engine::ui_recorder: UI recording session started: 9f2b6757-0e2b-45c7-bfae-9666e6db34c5\n2026-04-09T20:18:42.935268Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-09T20:18:42.935303Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-08 17:18:42.935300 UTC to 2026-04-09 17:18:42.935300 UTC)\n2026-04-09T20:18:42.935997Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-09T20:18:42.941704Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-09T20:18:42.946772Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-09T20:18:42.989922Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 209 frame entries, coverage from 2026-04-08 17:18:42.935300 UTC\n2026-04-09T20:18:43.291350Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-09T20:18:43.291384Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-09T20:18:43.291397Z INFO screenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_3008x1253_-813,-1253) — not in allowed list\n2026-04-09T20:18:43.291406Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-09T20:18:43.291520Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-09T20:18:44.032530Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-09T20:18:47.449731Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=210, dur=67ms\n2026-04-09T20:18:47.939991Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-09T20:18:47.940309Z INFO screenpipe: local retention auto-enabled (14 days)\n2026-04-09T20:18:52.910326Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-04-09T20:18:52.910382Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-04-09T20:18:52.910389Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 0.013 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-04-09T20:18:53.001173Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-04-09T20:18:53.005400Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-04-09T20:18:53.005773Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-04-09T20:18:53.005828Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-04-09T20:18:54.300159Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-04-09T20:18:54.300247Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (30s segments)\n2026-04-09T20:18:54.947320Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-04-09T20:18:54.947365Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (30s segments)\n2026-04-09T20:18:58.125886Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2732202531443799157, trigger=clipboard)\n2026-04-09T20:19:20.963903Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6279845026343263330, trigger=click)\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ npx screenpipe@latest record --disable-audio\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-09T20:19:52.412195Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-09T20:19:53.055756Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-09T20:19:53.058756Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-09T20:19:53.059017Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-09T20:19:53.059054Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-09T20:19:53.058846Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-09T20:19:53.059166Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-09T20:19:53.059575Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-09T20:19:53.059559Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-09T20:19:53.059832Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-09T20:19:53.060406Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-09T20:19:53.060587Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-09T20:19:53.060779Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-09T20:19:53.061707Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-09T20:19:53.061733Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ no monitors available │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-04-09T20:19:53.063534Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n2026-04-09T20:19:53.063553Z INFO screenpipe: starting UI event capture\n2026-04-09T20:19:53.074282Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-09T20:19:53.079729Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-09T20:19:53.084110Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-09T20:19:53.100563Z INFO screenpipe_engine::ui_recorder: UI recording session started: f26a4920-75f9-4a03-a6eb-151ca5c07685\n2026-04-09T20:19:53.100584Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-09T20:19:53.100646Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-08 17:19:53.100644 UTC to 2026-04-09 17:19:53.100644 UTC)\n2026-04-09T20:19:53.102360Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-09T20:19:53.110846Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-09T20:19:53.112584Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 224 frame entries, coverage from 2026-04-08 17:19:53.100644 UTC\n2026-04-09T20:19:53.120158Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-09T20:19:53.468211Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-09T20:19:53.468238Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-09T20:19:53.468248Z INFO screenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_3008x1253_-813,-1253) — not in allowed list\n2026-04-09T20:19:53.468256Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-09T20:19:53.468299Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-09T20:19:54.270276Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-09T20:19:54.417323Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=225, dur=69ms\n2026-04-09T20:19:58.104767Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-09T20:19:58.105051Z INFO screenpipe: local retention auto-enabled (14 days)\n2026-04-09T20:19:59.556143Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4063491422687871710, trigger=visual_change)","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"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.16458334,"top":0.05888889,"width":0.16458334,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.16875,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.32916668,"top":0.05888889,"width":0.16423611,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33333334,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Check today's app usage (claude)","depth":2,"bounds":{"left":0.49340278,"top":0.05888889,"width":0.16423611,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.49756944,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.6576389,"top":0.05888889,"width":0.16423611,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.66180557,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.821875,"top":0.05888889,"width":0.16423611,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.82604164,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.95763886,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.4722222,"top":0.033333335,"width":0.058333334,"height":0.017777778},"role_description":"text"}]...
|
8797470634329830031
|
-851668765083109920
|
visual_change
|
accessibility
|
NULL
|
ggml_metal_init: found device: Apple M1
ggml_metal ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-04-09T20:16:55.543375Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
zsh: terminated npx screenpipe@latest record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ npx screenpipe@latest record
detected hardware tier: Mid
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-04-09T20:18:41.912236Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-09T20:18:42.686011Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-09T20:18:42.687457Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-09T20:18:42.687473Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-09T20:18:42.687899Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-09T20:18:42.900414Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-09T20:18:42.900475Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-09T20:18:42.900422Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-09T20:18:42.900897Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-09T20:18:42.901174Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-09T20:18:42.901736Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-09T20:18:42.901893Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-09T20:18:42.902076Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-09T20:18:42.903039Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-09T20:18:42.903068Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ no monitors available │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
│ │ System Audio (output) │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ npx screenpipe@latest record --disable-audio
detected hardware tier: Mid
checking permissions...
screen recording: ok
accessibility: ok
2026-04-09T20:19:52.412195Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-09T20:19:53.055756Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-09T20:19:53.058756Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-09T20:19:53.059017Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-09T20:19:53.059054Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-09T20:19:53.058846Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-09T20:19:53.059166Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-09T20:19:53.059575Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-09T20:19:53.059559Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-09T20:19:53.059832Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-09T20:19:53.060406Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-09T20:19:53.060587Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-09T20:19:53.060779Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-09T20:19:53.061707Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-09T20:19:53.061733Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
p...
|
227
|
|
64970
|
1439
|
52
|
2026-04-21T11:51:19.772162+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776772279772_m1.jpg...
|
Firefox
|
Jiminny — Work
|
True
|
app.dev.jiminny.com/dashboard
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 2 Q2 - Platform Team - Scrum Board Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20372] AI Reports > Empty page design and promotion - Jira
[JY-20372] AI Reports > Empty page design and promotion - Jira
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Jiminny MCP Connector - Product - Confluence
Jiminny MCP Connector - Product - Confluence
Jiminny Mail
Jiminny Mail
[JY-20500] Batch initial sync for Salesforce - Jira
[JY-20500] Batch initial sync for Salesforce - Jira
Feed — jiminny — Sentry
Feed — jiminny — Sentry
Jiminny
Jiminny
Pipelines - jiminny/app
Pipelines - jiminny/app
Formalize
Formalize
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
Salesforce Pre-Authorization | Jiminny Help Center
Salesforce Pre-Authorization | Jiminny Help Center
Jiminny
Jiminny
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Close bookmarks (⌘B)
Bookmarks
Bookmarks
Close sidebar
Search bookmarks
My Recordings
My Recordings
Team Recordings
Team Recordings
Everyone's Recordings
Everyone's Recordings
Schedule
Schedule
Invite Notetaker
This Week
This Week
My Schedule
My Schedule
No Meetings
Trending this month
Trending this month
Sort by Sort by: Most played
Sort by
Sort by:
Most played
Jack Bateman-Chuah
Unknown Customer
Product Team weekly sync
Product Team weekly sync
0
times played
Alice Ketch
Unknown Customer
Chloe: 121 Alice 🤝
Chloe: 121 Alice 🤝
0
times played
Alice Ketch
Unknown Customer
Chloe: 121 Alice 🤝
Chloe: 121 Alice 🤝
0
times played
Alice Ketch
Unknown Customer
Hump 🐫 Day connect w/ Alice
Hump 🐫 Day connect w/ Alice
0
times played
Atanas Tasev
Unknown Customer
Recruitment Sync
Recruitment Sync
0
times played
Jack Bateman-Chuah
Unknown Customer
Product Team weekly sync
Product Team weekly sync
0
times played
Atanas Tasev
Unknown Customer
Stefan <> Nasko Bi-weekly
Stefan <> Nasko Bi-weekly
0
times played
Ophir Haber
Unknown Customer
CS <> Product - Weekly Sync 📊
CS <> Product - Weekly Sync 📊
0
times played
Ophir Haber
Unknown Customer
[Dialers & CRM] Backlog Refinement Session 🔍
[Dialers & CRM] Backlog Refinement Session 🔍
0
times played
Atanas Tasev
Unknown Customer
Retro - Discovery
Retro - Discovery
0
times played
Alice Ketch
Unknown Customer
Hump 🐫 Day connect w/ Alice
Hump 🐫 Day connect w/ Alice
0
times played
Alice Ketch
Unknown Customer
Hump 🐫 Day connect w/ Alice
Hump 🐫 Day connect w/ Alice
0
times played
Em Reeve
Unknown Customer
Orbital Witness x Jiminny | Quarterly Sync 💫
Orbital Witness x Jiminny | Quarterly Sync 💫
0
times played
Em Reeve
Robinson Crusoe Cruises Limited
⚡️ Kyloe Partners: Jiminny Sync ⚡️
⚡️ Kyloe Partners: Jiminny Sync ⚡️
0
times played
Ophir Haber
Unknown Customer
CS <> Product - Weekly Sync 📊
CS <> Product - Weekly Sync 📊
0
times played
Alice Ketch
Unknown Customer
Chloe: 121 Alice 🤝
Chloe: 121 Alice 🤝
0
times played
Ophir Haber
Unknown Customer
CS <> Product - Weekly Sync 📊
CS <> Product - Weekly Sync 📊
0
times played
Ophir Haber
Unknown Customer
[Dialers & CRM] Backlog Refinement Session 🔍
[Dialers & CRM] Backlog Refinement Session 🔍
0
times played
Atanas Tasev
Unknown Customer
Scrum of Scrums (SoS)
Scrum of Scrums (SoS)
0
times played
Vesselin Petrunov
Unknown Customer
SoS Scrum of Scrums
SoS Scrum of Scrums
0
times played
Atanas Tasev
Unknown Customer
Retro - Mobile Team
Retro - Mobile Team
0
times played
Ophir Haber
Unknown Customer
[Dialers & CRM] Backlog Refinement Session 🔍
[Dialers & CRM] Backlog Refinement Session 🔍
0
times played
Alice Ketch
Unknown Customer
Chloe / Alice 121 Coaching ⭐️
Chloe / Alice 121 Coaching ⭐️
0
times played
Atanas Tasev...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20372] AI Reports > Empty page design and promotion - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20372] AI Reports > Empty page design and promotion - Jira","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny MCP Connector - Product - Confluence","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny MCP Connector - Product - Confluence","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny Mail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20500] Batch initial sync for Salesforce - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20500] Batch initial sync for Salesforce - Jira","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Formalize","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Formalize","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"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":"Salesforce Pre-Authorization | Jiminny Help Center","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Salesforce Pre-Authorization | Jiminny Help Center","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":"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,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"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.008680556,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close bookmarks (⌘B)","depth":6,"bounds":{"left":0.031944446,"top":0.0,"width":0.022222223,"height":0.035555556},"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":false,"is_selected":false},{"role":"AXRadioButton","text":"My Recordings","depth":10,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"My Recordings","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Team Recordings","depth":10,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Team Recordings","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Everyone's Recordings","depth":10,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Everyone's Recordings","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Schedule","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Schedule","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Invite Notetaker","depth":10,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"This Week","depth":10,"value":"This Week","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"This Week","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"My Schedule","depth":10,"value":"My Schedule","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"My Schedule","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No Meetings","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Trending this month","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Trending this month","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Sort by Sort by: Most played","depth":9,"value":"Sort by Sort by: Most played","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Sort by","depth":10,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sort by:","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Most played","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jack Bateman-Chuah","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product Team weekly sync","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Product Team weekly sync","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Alice Ketch","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chloe: 121 Alice 🤝","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chloe: 121 Alice 🤝","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Alice Ketch","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chloe: 121 Alice 🤝","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chloe: 121 Alice 🤝","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Alice Ketch","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Hump 🐫 Day connect w/ Alice","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hump 🐫 Day connect w/ Alice","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Atanas Tasev","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Recruitment Sync","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Recruitment Sync","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jack Bateman-Chuah","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product Team weekly sync","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Product Team weekly sync","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Atanas Tasev","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Stefan <> Nasko Bi-weekly","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Stefan <> Nasko Bi-weekly","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ophir Haber","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"CS <> Product - Weekly Sync 📊","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CS <> Product - Weekly Sync 📊","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ophir Haber","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"[Dialers & CRM] Backlog Refinement Session 🔍","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[Dialers & CRM] Backlog Refinement Session 🔍","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Atanas Tasev","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Retro - Discovery","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Retro - Discovery","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Alice Ketch","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Hump 🐫 Day connect w/ Alice","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hump 🐫 Day connect w/ Alice","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Alice Ketch","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Hump 🐫 Day connect w/ Alice","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hump 🐫 Day connect w/ Alice","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Em Reeve","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Orbital Witness x Jiminny | Quarterly Sync 💫","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Orbital Witness x Jiminny | Quarterly Sync 💫","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Em Reeve","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Robinson Crusoe Cruises Limited","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"⚡️ Kyloe Partners: Jiminny Sync ⚡️","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"⚡️ Kyloe Partners: Jiminny Sync ⚡️","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ophir Haber","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"CS <> Product - Weekly Sync 📊","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CS <> Product - Weekly Sync 📊","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Alice Ketch","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chloe: 121 Alice 🤝","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chloe: 121 Alice 🤝","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ophir Haber","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"CS <> Product - Weekly Sync 📊","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CS <> Product - Weekly Sync 📊","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ophir Haber","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"[Dialers & CRM] Backlog Refinement Session 🔍","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[Dialers & CRM] Backlog Refinement Session 🔍","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Atanas Tasev","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Scrum of Scrums (SoS)","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Scrum of Scrums (SoS)","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vesselin Petrunov","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SoS Scrum of Scrums","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SoS Scrum of Scrums","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Atanas Tasev","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Retro - Mobile Team","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Retro - Mobile Team","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ophir Haber","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"[Dialers & CRM] Backlog Refinement Session 🔍","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[Dialers & CRM] Backlog Refinement Session 🔍","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Alice Ketch","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unknown Customer","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chloe / Alice 121 Coaching ⭐️","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chloe / Alice 121 Coaching ⭐️","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"times played","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Atanas Tasev","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8797417960094278046
|
4016273854412213137
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 2 Q2 - Platform Team - Scrum Board Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20372] AI Reports > Empty page design and promotion - Jira
[JY-20372] AI Reports > Empty page design and promotion - Jira
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Jiminny MCP Connector - Product - Confluence
Jiminny MCP Connector - Product - Confluence
Jiminny Mail
Jiminny Mail
[JY-20500] Batch initial sync for Salesforce - Jira
[JY-20500] Batch initial sync for Salesforce - Jira
Feed — jiminny — Sentry
Feed — jiminny — Sentry
Jiminny
Jiminny
Pipelines - jiminny/app
Pipelines - jiminny/app
Formalize
Formalize
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
Salesforce Pre-Authorization | Jiminny Help Center
Salesforce Pre-Authorization | Jiminny Help Center
Jiminny
Jiminny
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Close bookmarks (⌘B)
Bookmarks
Bookmarks
Close sidebar
Search bookmarks
My Recordings
My Recordings
Team Recordings
Team Recordings
Everyone's Recordings
Everyone's Recordings
Schedule
Schedule
Invite Notetaker
This Week
This Week
My Schedule
My Schedule
No Meetings
Trending this month
Trending this month
Sort by Sort by: Most played
Sort by
Sort by:
Most played
Jack Bateman-Chuah
Unknown Customer
Product Team weekly sync
Product Team weekly sync
0
times played
Alice Ketch
Unknown Customer
Chloe: 121 Alice 🤝
Chloe: 121 Alice 🤝
0
times played
Alice Ketch
Unknown Customer
Chloe: 121 Alice 🤝
Chloe: 121 Alice 🤝
0
times played
Alice Ketch
Unknown Customer
Hump 🐫 Day connect w/ Alice
Hump 🐫 Day connect w/ Alice
0
times played
Atanas Tasev
Unknown Customer
Recruitment Sync
Recruitment Sync
0
times played
Jack Bateman-Chuah
Unknown Customer
Product Team weekly sync
Product Team weekly sync
0
times played
Atanas Tasev
Unknown Customer
Stefan <> Nasko Bi-weekly
Stefan <> Nasko Bi-weekly
0
times played
Ophir Haber
Unknown Customer
CS <> Product - Weekly Sync 📊
CS <> Product - Weekly Sync 📊
0
times played
Ophir Haber
Unknown Customer
[Dialers & CRM] Backlog Refinement Session 🔍
[Dialers & CRM] Backlog Refinement Session 🔍
0
times played
Atanas Tasev
Unknown Customer
Retro - Discovery
Retro - Discovery
0
times played
Alice Ketch
Unknown Customer
Hump 🐫 Day connect w/ Alice
Hump 🐫 Day connect w/ Alice
0
times played
Alice Ketch
Unknown Customer
Hump 🐫 Day connect w/ Alice
Hump 🐫 Day connect w/ Alice
0
times played
Em Reeve
Unknown Customer
Orbital Witness x Jiminny | Quarterly Sync 💫
Orbital Witness x Jiminny | Quarterly Sync 💫
0
times played
Em Reeve
Robinson Crusoe Cruises Limited
⚡️ Kyloe Partners: Jiminny Sync ⚡️
⚡️ Kyloe Partners: Jiminny Sync ⚡️
0
times played
Ophir Haber
Unknown Customer
CS <> Product - Weekly Sync 📊
CS <> Product - Weekly Sync 📊
0
times played
Alice Ketch
Unknown Customer
Chloe: 121 Alice 🤝
Chloe: 121 Alice 🤝
0
times played
Ophir Haber
Unknown Customer
CS <> Product - Weekly Sync 📊
CS <> Product - Weekly Sync 📊
0
times played
Ophir Haber
Unknown Customer
[Dialers & CRM] Backlog Refinement Session 🔍
[Dialers & CRM] Backlog Refinement Session 🔍
0
times played
Atanas Tasev
Unknown Customer
Scrum of Scrums (SoS)
Scrum of Scrums (SoS)
0
times played
Vesselin Petrunov
Unknown Customer
SoS Scrum of Scrums
SoS Scrum of Scrums
0
times played
Atanas Tasev
Unknown Customer
Retro - Mobile Team
Retro - Mobile Team
0
times played
Ophir Haber
Unknown Customer
[Dialers & CRM] Backlog Refinement Session 🔍
[Dialers & CRM] Backlog Refinement Session 🔍
0
times played
Alice Ketch
Unknown Customer
Chloe / Alice 121 Coaching ⭐️
Chloe / Alice 121 Coaching ⭐️
0
times played
Atanas Tasev...
|
64969
|
|
80924
|
NULL
|
0
|
2026-04-25T15:27:00.899230+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-25/1777 /Users/lukas/.screenpipe/data/data/2026-04-25/1777130820899_m2.jpg...
|
Firefox
|
MikroTik · Switches — Personal
|
True
|
mikrotik.com/products/group/switches
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
Inbox (7) - [EMAIL] - Gmail
(56) DXP4800PLUS-B5F8
Inbox (7) - [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
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
New Tab
MikroTik · Switches
MikroTik · Switches
Close tab
New Tab
Customize sidebar
Open Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Go to home page
HOME
HOME
HARDWARE
HARDWARE
SWITCHES
SWITCHES
Status
Status
Wired Interfaces
Wired Interfaces
Options Range
Options Range
Features
Features
Operating System
Operating System
Architecture
Architecture
Product page for netPower Lite 8P
NEW
netPower Lite 8P
$199.00
*
SFP/SFP+
PoE
Outdoors
IP 54
Low-cost. Tough. And always ON! Compact PoE switch with built-in UPS and smart battery charger – because your CCTV cameras and access points deserve true off-the-grid resilience.
Product page for CRS804 DDQ
NEW
CRS804 DDQ
$1,295.00
*
400G
10G
ARM64
Quad-core CPU
ROS v7
A compact 1U 400G switch built for AI clusters, storage fabrics, and high-speed aggregation, featuring four 400G QSFP56-DD ports, dual 10 Gigabit Ethernet, and RouterOS v7. With hot-swap power supplies, robust cooling, and low power consumption, it delivers ultra-high bandwidth, wire-speed performance, and future-proof scalability at an accessible price point.
Product page for CRS304-4XG-IN
CRS304-4XG-IN
$199.00
*
10G
PoE
ARM64
ROS v7
Compact, powerful, and ready to simplify your 10 Gigabit network setups with 4x10G Ethernet ports ready to use out-of-the-box. No extra modules needed!
Product page for CRS305-1G-4S+IN
CRS305-1G-4S+IN
$149.00
*
SFP/SFP+
PoE
ARM
Five-port desktop switch with one Gigabit Ethernet port and four SFP+ 10Gbps ports
Product page for CRS312-4C+8XG-RM
CRS312-4C+8XG-RM
$699.00
*
10G
Combo ports
ROS v7
Switch of the future: the first MikroTik product with 10G RJ45 Ethernet ports and SFP+
Product page for CRS320-8P-8B-4S+RM
CRS320-8P-8B-4S+RM
$489.00
*
SFP/SFP+
PoE
ARM
ROS v7
The first MikroTik high-power PoE++ switch – for easy and cost-effective powering of industry standard 802.3af/at/bt devices. Forget about countless power cables – create a cleaner space with PoE++!
Product page for CRS317-1G-16S+RM
CRS317-1G-16S+RM
$499.00
*
SFP/SFP+
ARM
Smart Switch, 1 x Gigabit LAN, 16 x SFP+ cages, Dual Core 800MHz CPU, 1GB RAM, 1U rackmount passive cooling case, Dual Power Supplies
Product page for CRS309-1G-8S+IN
CRS309-1G-8S+IN
$269.00
*
SFP/SFP+
PoE
ARM
Desktop switch with one Gigabit Ethernet port and eight SFP+ 10Gbps ports
Product page for CRS518-16XS-2XQ-RM
CRS518-16XS-2XQ-RM
$1,595.00
*
100G
ROS v7
A 100 Gigabit switch for enterprise networks and data centers. Hot-swappable parts and insane port density with 1.2 Tbps switching capacity!
Product page for CRS310-1G-5S-4S+IN
CRS310-1G-5S-4S+IN
$199.00
*
SFP/SFP+
PoE
ARM
ROS v7
10 Gigabit fibre connectivity way over a 100 meters – for small offices or ISPs. Hardware offloaded VLAN-filtering and even some L3 routing on a budget!
Product page for CRS310-8G+2S+IN
CRS310-8G+2S+IN
$219.00
*
SFP/SFP+
2.5G
ARM
ROS v7
Take advantage of the blazing fast 2.5/10 Gigabit combo and upgrade your workspace! This switch can utilize the full potential of RouterOS v7: run VLANs, Jumbo frames, link aggregation, ACL rules, and so much more!
Product page for netPower 16P
netPower 16P
$279.00
*
SFP/SFP+
PoE
ARM
Outdoors
IP 54
An outdoor 18 port switch with 16 Gigabit PoE-out ports and 2 SFP+. Power all your access points anywhere!
Product page for netPower 15FR
netPower 15FR
$169.00
*
SFP/SFP+
PoE
ARM
Outdoors
IP 54
An outdoor 18 port switch with 15 reverse PoE ports and SFP. Cut costs, not speed – choose GPEN over GPON!
Product page for netFiber 9
netFiber 9
$249.00
*
SFP/SFP+
PoE
ARM
Outdoors
IP 54
ROS v7
A remarkable outdoor switch for setting up an optical 10G network that can even perform some light routing. The spiritual successor to the beloved FiberBox. Gigabit Ethernet, SFP/SFP+, PoE.
Product page for CRS326-24G-2S+IN
CRS326-24G-2S+IN
$199.00
*
SFP/SFP+
PoE
ARM
24 Gigabit ports, 2 SFP+ cages and a desktop case – server room power for your home!
Product page for CRS326-24G-2S+RM
CRS326-24G-2S+RM
$209.00
*
SFP/SFP+
PoE
ARM
24 Gigabit port switch with 2 x SFP+ cages in 1U rackmount case, Dual boot (RouterOS or SwitchOS)
Product page for CRS326-24S+2Q+RM
CRS326-24S+2Q+RM
$599.00
*
SFP/SFP+...
|
[{"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":"Inbox (7) - 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":false},{"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":"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":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.5857941,"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":"New Tab","depth":5,"bounds":{"left":0.013297873,"top":0.5969673,"width":0.014960106,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"MikroTik · Switches","depth":4,"bounds":{"left":0.0,"top":0.61851555,"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":"MikroTik · Switches","depth":5,"bounds":{"left":0.013297873,"top":0.62968874,"width":0.033410903,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.10139628,"top":0.6256983,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.6528332,"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":"AXLink","text":"Skip to main content","depth":6,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to home page","depth":8,"bounds":{"left":0.3174867,"top":0.07063048,"width":0.061835106,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"","depth":8,"bounds":{"left":0.77227396,"top":0.07102953,"width":0.010638298,"height":0.025538707},"help_text":"Search products","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":10,"bounds":{"left":0.7749335,"top":0.07741421,"width":0.005319149,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":8,"bounds":{"left":0.7855718,"top":0.07102953,"width":0.010638298,"height":0.025538707},"help_text":"Account","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":10,"bounds":{"left":0.7882314,"top":0.07741421,"width":0.005319149,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"HOME","depth":6,"bounds":{"left":0.3174867,"top":0.14205906,"width":0.010804521,"height":0.0131683955},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"HOME","depth":7,"bounds":{"left":0.3174867,"top":0.14205906,"width":0.010804521,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"HARDWARE","depth":6,"bounds":{"left":0.33178192,"top":0.14205906,"width":0.02044548,"height":0.0131683955},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"HARDWARE","depth":7,"bounds":{"left":0.33178192,"top":0.14205906,"width":0.02044548,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"SWITCHES","depth":6,"bounds":{"left":0.3174867,"top":0.16839585,"width":0.25531915,"height":0.04309657},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SWITCHES","depth":7,"bounds":{"left":0.3174867,"top":0.16480447,"width":0.07662899,"height":0.050678372},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Status ","depth":6,"bounds":{"left":0.3174867,"top":0.25059855,"width":0.034408245,"height":0.030327214},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Status","depth":8,"bounds":{"left":0.3231383,"top":0.25937748,"width":0.014295213,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":8,"bounds":{"left":0.34009308,"top":0.2585794,"width":0.006150266,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Wired Interfaces ","depth":6,"bounds":{"left":0.35455453,"top":0.25059855,"width":0.058344416,"height":0.030327214},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wired Interfaces","depth":8,"bounds":{"left":0.36020613,"top":0.25937748,"width":0.038231384,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":8,"bounds":{"left":0.4010971,"top":0.2585794,"width":0.006150266,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Options Range ","depth":6,"bounds":{"left":0.41555852,"top":0.25059855,"width":0.051030584,"height":0.030327214},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Options Range","depth":8,"bounds":{"left":0.4212101,"top":0.25937748,"width":0.031083776,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":8,"bounds":{"left":0.45495346,"top":0.2585794,"width":0.005984043,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Features ","depth":6,"bounds":{"left":0.46924868,"top":0.25059855,"width":0.039228722,"height":0.030327214},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Features","depth":8,"bounds":{"left":0.47490028,"top":0.25937748,"width":0.019115692,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":8,"bounds":{"left":0.49667552,"top":0.2585794,"width":0.006150266,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Operating System ","depth":6,"bounds":{"left":0.51113695,"top":0.25059855,"width":0.05817819,"height":0.030327214},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Operating System","depth":8,"bounds":{"left":0.51678854,"top":0.25937748,"width":0.038231384,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":8,"bounds":{"left":0.55767953,"top":0.2585794,"width":0.005984043,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Architecture ","depth":6,"bounds":{"left":0.57197475,"top":0.25059855,"width":0.04886968,"height":0.030327214},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Architecture","depth":8,"bounds":{"left":0.57762635,"top":0.25937748,"width":0.028756648,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":8,"bounds":{"left":0.6090425,"top":0.2585794,"width":0.006150266,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"","depth":6,"bounds":{"left":0.7855718,"top":0.25059855,"width":0.010638298,"height":0.025538707},"help_text":"Choose sorting option","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":8,"bounds":{"left":0.7875665,"top":0.25538707,"width":0.0066489363,"height":0.015961692},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product page for netPower Lite 8P","depth":6,"bounds":{"left":0.3174867,"top":0.29369512,"width":0.11170213,"height":0.51955307},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NEW","depth":7,"bounds":{"left":0.32014626,"top":0.584996,"width":0.0071476065,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"netPower Lite 8P","depth":7,"bounds":{"left":0.33261302,"top":0.5806065,"width":0.06382979,"height":0.021149242},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$199.00","depth":8,"bounds":{"left":0.3174867,"top":0.6017558,"width":0.016788565,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"bounds":{"left":0.33427528,"top":0.60055864,"width":0.0018284575,"height":0.009976057},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SFP/SFP+","depth":6,"bounds":{"left":0.32613033,"top":0.6360734,"width":0.019115692,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PoE","depth":6,"bounds":{"left":0.38331118,"top":0.6360734,"width":0.0071476065,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Outdoors","depth":6,"bounds":{"left":0.32613033,"top":0.6584198,"width":0.019115692,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"IP 54","depth":6,"bounds":{"left":0.38331118,"top":0.6584198,"width":0.011968086,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Low-cost. Tough. And always ON! Compact PoE switch with built-in UPS and smart battery charger – because your CCTV cameras and access points deserve true off-the-grid resilience.","depth":7,"bounds":{"left":0.3174867,"top":0.6927374,"width":0.1100399,"height":0.056264963},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product page for CRS804 DDQ","depth":6,"bounds":{"left":0.4398271,"top":0.29369512,"width":0.11170213,"height":0.51955307},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NEW","depth":7,"bounds":{"left":0.4424867,"top":0.584996,"width":0.0071476065,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CRS804 DDQ","depth":7,"bounds":{"left":0.45495346,"top":0.5806065,"width":0.039893616,"height":0.021149242},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$1,295.00","depth":8,"bounds":{"left":0.4398271,"top":0.6017558,"width":0.021609042,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"bounds":{"left":0.46143618,"top":0.60055864,"width":0.0016622341,"height":0.009976057},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"400G","depth":6,"bounds":{"left":0.44847074,"top":0.6360734,"width":0.009640957,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10G","depth":6,"bounds":{"left":0.5056516,"top":0.6360734,"width":0.0071476065,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ARM64","depth":6,"bounds":{"left":0.44847074,"top":0.6584198,"width":0.011968086,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Quad-core CPU","depth":6,"bounds":{"left":0.5056516,"top":0.6584198,"width":0.031083776,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ROS v7","depth":6,"bounds":{"left":0.44847074,"top":0.68076617,"width":0.014295213,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"A compact 1U 400G switch built for AI clusters, storage fabrics, and high-speed aggregation, featuring four 400G QSFP56-DD ports, dual 10 Gigabit Ethernet, and RouterOS v7. With hot-swap power supplies, robust cooling, and low power consumption, it delivers ultra-high bandwidth, wire-speed performance, and future-proof scalability at an accessible price point.","depth":7,"bounds":{"left":0.4398271,"top":0.7150838,"width":0.10771277,"height":0.12809257},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product page for CRS304-4XG-IN","depth":6,"bounds":{"left":0.5621675,"top":0.29369512,"width":0.11170213,"height":0.51955307},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXButton","text":"","depth":6,"bounds":{"left":0.6525931,"top":0.3064645,"width":0.015957447,"height":0.03830806},"help_text":"Add to compare","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":8,"bounds":{"left":0.6565825,"top":0.3160415,"width":0.007978723,"height":0.019553073},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CRS304-4XG-IN","depth":7,"bounds":{"left":0.5621675,"top":0.5806065,"width":0.051861703,"height":0.021149242},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$199.00","depth":8,"bounds":{"left":0.5621675,"top":0.6017558,"width":0.016788565,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"bounds":{"left":0.5789561,"top":0.60055864,"width":0.0018284575,"height":0.009976057},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10G","depth":6,"bounds":{"left":0.57081115,"top":0.6360734,"width":0.0071476065,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PoE","depth":6,"bounds":{"left":0.62799203,"top":0.6360734,"width":0.0071476065,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ARM64","depth":6,"bounds":{"left":0.57081115,"top":0.6584198,"width":0.011968086,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ROS v7","depth":6,"bounds":{"left":0.62799203,"top":0.6584198,"width":0.014295213,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Compact, powerful, and ready to simplify your 10 Gigabit network setups with 4x10G Ethernet ports ready to use out-of-the-box. No extra modules needed!","depth":7,"bounds":{"left":0.5621675,"top":0.6927374,"width":0.10771277,"height":0.056264963},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product page for CRS305-1G-4S+IN","depth":6,"bounds":{"left":0.68450797,"top":0.29369512,"width":0.11170213,"height":0.51955307},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CRS305-1G-4S+IN","depth":7,"bounds":{"left":0.68450797,"top":0.5806065,"width":0.059840426,"height":0.021149242},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$149.00","depth":8,"bounds":{"left":0.68450797,"top":0.6017558,"width":0.016788565,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"bounds":{"left":0.70129657,"top":0.60055864,"width":0.0018284575,"height":0.009976057},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SFP/SFP+","depth":6,"bounds":{"left":0.6931516,"top":0.6360734,"width":0.019115692,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PoE","depth":6,"bounds":{"left":0.7503325,"top":0.6360734,"width":0.0071476065,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ARM","depth":6,"bounds":{"left":0.6931516,"top":0.6584198,"width":0.0071476065,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Five-port desktop switch with one Gigabit Ethernet port and four SFP+ 10Gbps ports","depth":7,"bounds":{"left":0.68450797,"top":0.6927374,"width":0.098071806,"height":0.027533919},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product page for CRS312-4C+8XG-RM","depth":6,"bounds":{"left":0.3174867,"top":0.8387869,"width":0.11170213,"height":0.1612131},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CRS312-4C+8XG-RM","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$699.00","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10G","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Combo ports","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ROS v7","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Switch of the future: the first MikroTik product with 10G RJ45 Ethernet ports and SFP+","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product page for CRS320-8P-8B-4S+RM","depth":6,"bounds":{"left":0.4398271,"top":0.8387869,"width":0.11170213,"height":0.1612131},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"","depth":6,"bounds":{"left":0.53025264,"top":0.85155624,"width":0.015957447,"height":0.03830806},"help_text":"Add to compare","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":8,"bounds":{"left":0.53424203,"top":0.8611333,"width":0.007978723,"height":0.019553073},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CRS320-8P-8B-4S+RM","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$489.00","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SFP/SFP+","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PoE","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ARM","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ROS v7","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The first MikroTik high-power PoE++ switch – for easy and cost-effective powering of industry standard 802.3af/at/bt devices. Forget about countless power cables – create a cleaner space with PoE++!","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product page for CRS317-1G-16S+RM","depth":6,"bounds":{"left":0.5621675,"top":0.8387869,"width":0.11170213,"height":0.1612131},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CRS317-1G-16S+RM","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$499.00","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SFP/SFP+","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ARM","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Smart Switch, 1 x Gigabit LAN, 16 x SFP+ cages, Dual Core 800MHz CPU, 1GB RAM, 1U rackmount passive cooling case, Dual Power Supplies","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product page for CRS309-1G-8S+IN","depth":6,"bounds":{"left":0.68450797,"top":0.8387869,"width":0.11170213,"height":0.1612131},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CRS309-1G-8S+IN","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$269.00","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SFP/SFP+","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PoE","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ARM","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Desktop switch with one Gigabit Ethernet port and eight SFP+ 10Gbps ports","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product page for CRS518-16XS-2XQ-RM","depth":6,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CRS518-16XS-2XQ-RM","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$1,595.00","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100G","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ROS v7","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"A 100 Gigabit switch for enterprise networks and data centers. Hot-swappable parts and insane port density with 1.2 Tbps switching capacity!","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product page for CRS310-1G-5S-4S+IN","depth":6,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CRS310-1G-5S-4S+IN","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$199.00","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SFP/SFP+","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PoE","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ARM","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ROS v7","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10 Gigabit fibre connectivity way over a 100 meters – for small offices or ISPs. Hardware offloaded VLAN-filtering and even some L3 routing on a budget!","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product page for CRS310-8G+2S+IN","depth":6,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CRS310-8G+2S+IN","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$219.00","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SFP/SFP+","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2.5G","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ARM","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ROS v7","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Take advantage of the blazing fast 2.5/10 Gigabit combo and upgrade your workspace! This switch can utilize the full potential of RouterOS v7: run VLANs, Jumbo frames, link aggregation, ACL rules, and so much more!","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product page for netPower 16P","depth":6,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"netPower 16P","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$279.00","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SFP/SFP+","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PoE","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ARM","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Outdoors","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"IP 54","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"An outdoor 18 port switch with 16 Gigabit PoE-out ports and 2 SFP+. Power all your access points anywhere!","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product page for netPower 15FR","depth":6,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"netPower 15FR","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$169.00","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SFP/SFP+","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PoE","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ARM","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Outdoors","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"IP 54","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"An outdoor 18 port switch with 15 reverse PoE ports and SFP. Cut costs, not speed – choose GPEN over GPON!","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product page for netFiber 9","depth":6,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"netFiber 9","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$249.00","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SFP/SFP+","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PoE","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ARM","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Outdoors","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"IP 54","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ROS v7","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"A remarkable outdoor switch for setting up an optical 10G network that can even perform some light routing. The spiritual successor to the beloved FiberBox. Gigabit Ethernet, SFP/SFP+, PoE.","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product page for CRS326-24G-2S+IN","depth":6,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CRS326-24G-2S+IN","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$199.00","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SFP/SFP+","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PoE","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ARM","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"24 Gigabit ports, 2 SFP+ cages and a desktop case – server room power for your home!","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product page for CRS326-24G-2S+RM","depth":6,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CRS326-24G-2S+RM","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$209.00","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SFP/SFP+","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PoE","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ARM","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"24 Gigabit port switch with 2 x SFP+ cages in 1U rackmount case, Dual boot (RouterOS or SwitchOS)","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Product page for CRS326-24S+2Q+RM","depth":6,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CRS326-24S+2Q+RM","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$599.00","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SFP/SFP+","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8797131598185245290
|
-4253942420927644799
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
Inbox (7) - [EMAIL] - Gmail
(56) DXP4800PLUS-B5F8
Inbox (7) - [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
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
New Tab
MikroTik · Switches
MikroTik · Switches
Close tab
New Tab
Customize sidebar
Open Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Go to home page
HOME
HOME
HARDWARE
HARDWARE
SWITCHES
SWITCHES
Status
Status
Wired Interfaces
Wired Interfaces
Options Range
Options Range
Features
Features
Operating System
Operating System
Architecture
Architecture
Product page for netPower Lite 8P
NEW
netPower Lite 8P
$199.00
*
SFP/SFP+
PoE
Outdoors
IP 54
Low-cost. Tough. And always ON! Compact PoE switch with built-in UPS and smart battery charger – because your CCTV cameras and access points deserve true off-the-grid resilience.
Product page for CRS804 DDQ
NEW
CRS804 DDQ
$1,295.00
*
400G
10G
ARM64
Quad-core CPU
ROS v7
A compact 1U 400G switch built for AI clusters, storage fabrics, and high-speed aggregation, featuring four 400G QSFP56-DD ports, dual 10 Gigabit Ethernet, and RouterOS v7. With hot-swap power supplies, robust cooling, and low power consumption, it delivers ultra-high bandwidth, wire-speed performance, and future-proof scalability at an accessible price point.
Product page for CRS304-4XG-IN
CRS304-4XG-IN
$199.00
*
10G
PoE
ARM64
ROS v7
Compact, powerful, and ready to simplify your 10 Gigabit network setups with 4x10G Ethernet ports ready to use out-of-the-box. No extra modules needed!
Product page for CRS305-1G-4S+IN
CRS305-1G-4S+IN
$149.00
*
SFP/SFP+
PoE
ARM
Five-port desktop switch with one Gigabit Ethernet port and four SFP+ 10Gbps ports
Product page for CRS312-4C+8XG-RM
CRS312-4C+8XG-RM
$699.00
*
10G
Combo ports
ROS v7
Switch of the future: the first MikroTik product with 10G RJ45 Ethernet ports and SFP+
Product page for CRS320-8P-8B-4S+RM
CRS320-8P-8B-4S+RM
$489.00
*
SFP/SFP+
PoE
ARM
ROS v7
The first MikroTik high-power PoE++ switch – for easy and cost-effective powering of industry standard 802.3af/at/bt devices. Forget about countless power cables – create a cleaner space with PoE++!
Product page for CRS317-1G-16S+RM
CRS317-1G-16S+RM
$499.00
*
SFP/SFP+
ARM
Smart Switch, 1 x Gigabit LAN, 16 x SFP+ cages, Dual Core 800MHz CPU, 1GB RAM, 1U rackmount passive cooling case, Dual Power Supplies
Product page for CRS309-1G-8S+IN
CRS309-1G-8S+IN
$269.00
*
SFP/SFP+
PoE
ARM
Desktop switch with one Gigabit Ethernet port and eight SFP+ 10Gbps ports
Product page for CRS518-16XS-2XQ-RM
CRS518-16XS-2XQ-RM
$1,595.00
*
100G
ROS v7
A 100 Gigabit switch for enterprise networks and data centers. Hot-swappable parts and insane port density with 1.2 Tbps switching capacity!
Product page for CRS310-1G-5S-4S+IN
CRS310-1G-5S-4S+IN
$199.00
*
SFP/SFP+
PoE
ARM
ROS v7
10 Gigabit fibre connectivity way over a 100 meters – for small offices or ISPs. Hardware offloaded VLAN-filtering and even some L3 routing on a budget!
Product page for CRS310-8G+2S+IN
CRS310-8G+2S+IN
$219.00
*
SFP/SFP+
2.5G
ARM
ROS v7
Take advantage of the blazing fast 2.5/10 Gigabit combo and upgrade your workspace! This switch can utilize the full potential of RouterOS v7: run VLANs, Jumbo frames, link aggregation, ACL rules, and so much more!
Product page for netPower 16P
netPower 16P
$279.00
*
SFP/SFP+
PoE
ARM
Outdoors
IP 54
An outdoor 18 port switch with 16 Gigabit PoE-out ports and 2 SFP+. Power all your access points anywhere!
Product page for netPower 15FR
netPower 15FR
$169.00
*
SFP/SFP+
PoE
ARM
Outdoors
IP 54
An outdoor 18 port switch with 15 reverse PoE ports and SFP. Cut costs, not speed – choose GPEN over GPON!
Product page for netFiber 9
netFiber 9
$249.00
*
SFP/SFP+
PoE
ARM
Outdoors
IP 54
ROS v7
A remarkable outdoor switch for setting up an optical 10G network that can even perform some light routing. The spiritual successor to the beloved FiberBox. Gigabit Ethernet, SFP/SFP+, PoE.
Product page for CRS326-24G-2S+IN
CRS326-24G-2S+IN
$199.00
*
SFP/SFP+
PoE
ARM
24 Gigabit ports, 2 SFP+ cages and a desktop case – server room power for your home!
Product page for CRS326-24G-2S+RM
CRS326-24G-2S+RM
$209.00
*
SFP/SFP+
PoE
ARM
24 Gigabit port switch with 2 x SFP+ cages in 1U rackmount case, Dual boot (RouterOS or SwitchOS)
Product page for CRS326-24S+2Q+RM
CRS326-24S+2Q+RM
$599.00
*
SFP/SFP+...
|
80923
|
|
79386
|
2057
|
3
|
2026-04-24T16:16:03.874522+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777047363874_m1.jpg...
|
Firefox
|
(56) Inbox | kovaliklukas@proton.me | Proton Mail (56) Inbox | kovaliklukas@proton.me | Proton Mail — Personal...
|
True
|
mail.proton.me/u/0/inbox#page=3
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Today's Deals
amazon.com
DXP4800PLUS-B5F8
5 Si Today's Deals
amazon.com
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
Close tab
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
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
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Proton Mail
needs your permission to
enable desktop notifications
.
Close this banner
Close this banner
Proton Mail
Proton Mail
Proton Mail
Proton applications
New message
Navigation
Navigation
Inbox 56 unread conversations
Inbox
56
Drafts
Drafts
Sent
Sent
Starred
Starred
More
More
More
More
Views
Views
Views
Views
Newsletters
Newsletters
Folders
Folders
Folders
Folders
Create a new folder
Create a new folder
Manage your folders
Manage your folders
Labels
Labels
Labels
Labels
Create a new label
Create a new label
Manage your labels
Manage your labels
gmail.com 26-04-2025 17:28
gmail.com 26-04-2025 17:28
Important
Important
Show navigation bar
Show navigation bar
Your current storage: 17.76 MB / 500.00 MB
17.76 MB / 500.00 MB
17.76 MB
/
500.00 MB
Proton Mail [IP_ADDRESS]
Proton Mail
[IP_ADDRESS]
Search
Search
Search messages
Upgrade
Upgrade
Attention required Toggle settings
Attention required
Toggle settings
kovaliklukas [EMAIL]
kovaliklukas
[EMAIL]
Conversation list 56 unread messages
Conversation list
56 unread messages
Select all messages
Select all messages
Inbox
Inbox
More
More
All
Read
Unread
Has attachments
Sort conversations
Previous page
Previous page
3/4
3
/
4
Next page
Next page
Upgrade to level up your privacy.
Upgrade
Close
Close
Star conversation
Star conversation
Unread email
Matúš Kostolný Denník N
2 messages in conversation Šutaj Eštok v bakalárke: Pracovný deň začíname skontrolovaním e-mailovej schránky
2 messages in conversation
Šutaj Eštok v bakalárke: Pracovný deň začíname skontrolovaním e-mailovej schránky
Friday, December 19th, 2025 at 10:52 AM
Star conversation
Star conversation
Ranných 5 minút | Denník N
Fico na kľúčovom samite odmietol garancie na pôžičku Ukrajine | Vyše 150 prokurátorov sa postavilo proti novele | Zverejnili spoločnú fotku Lajčáka a Epsteina
Fico na kľúčovom samite odmietol garancie na pôžičku Ukrajine | Vyše 150 prokurátorov sa postavilo proti novele | Zverejnili spoločnú fotku Lajčáka a Epsteina
Friday, December 19th, 2025 at 8:24 AM
Star conversation
Star conversation
Unread email
Ranných 5 minút | Denník N
Vládne zákony narazili na Ústavný súd | Od koalície odišlo už pol milióna voličov | Rusko pritvrdzuje proti Európe | Vysvetľujeme zmeny pri predaji áut po roku 2035
Vládne zákony narazili na Ústavný súd | Od koalície odišlo už pol milióna voličov | Rusko pritvrdzuje proti Európe | Vysvetľujeme zmeny pri predaji áut po roku 2035
Thursday, December 18th, 2025 at 8:00 AM
Star conversation
Star conversation
Unread email
Ranných 5 minút | Denník N
Pavol Gašpar podrazil českú tajnú službu | Čo sme našli v diplomovke a bakalárke Šutaja Eštoka | K opozičnému protestu sa prvýkrát pripojila Maďarská aliancia
Pavol Gašpar podrazil českú tajnú službu | Čo sme našli v diplomovke a bakalárke Šutaja Eštoka | K opozičnému protestu sa prvýkrát pripojila Maďarská aliancia
Wednesday, December 17th, 2025 at 7:52 AM
Star conversation
Star conversation
Unread email
Ranných 5 minút | Denník N
Prenikli sme do sveta slovenských manfluencerov | V desiatke miest budú opozičné protesty | Strelca na pláži v Sydney zneškodnil moslimský predavač ovocia
Prenikli sme do sveta slovenských manfluencerov | V desiatke miest budú opozičné protesty | Strelca na pláži v Sydney zneškodnil moslimský predavač ovocia
Tuesday, December 16th, 2025 at 7:51 AM
Star conversation
Star conversation
Unread email
Ranných 5 minút | Denník N
Medzi obeťami útoku v Sydney je aj Slovenka | Kaliňák neočakáva veto trestnej novely | Zelenskyj pripustil kompromis pri NATO
Medzi obeťami útoku v Sydney je aj Slovenka | Kaliňák neočakáva veto trestnej novely | Zelenskyj pripustil kompromis pri NATO
Monday, December 15th, 2025 at 9:16 AM...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Today's Deals","depth":4,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"amazon.com","depth":4,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"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":true},{"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":"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":"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":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"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":"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,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"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.0,"top":0.0,"width":0.022222223,"height":0.035555556},"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.016666668,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Proton Mail","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"needs your permission to","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"enable desktop notifications","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close this banner","depth":10,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Close this banner","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Proton Mail","depth":10,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Proton Mail","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Proton Mail","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Proton applications","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New message","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Navigation","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Navigation","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Inbox 56 unread conversations","depth":15,"help_text":"Inbox","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"56","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Drafts","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Drafts","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sent","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sent","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Starred","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Starred","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"More","depth":14,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More","depth":14,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Views","depth":15,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Views","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Views","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Views","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Newsletters","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Newsletters","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Folders","depth":15,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Folders","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Folders","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Folders","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create a new folder","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create a new folder","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Manage your folders","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Manage your folders","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Labels","depth":15,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Labels","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Labels","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Labels","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create a new label","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create a new label","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Manage your labels","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Manage your labels","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"gmail.com 26-04-2025 17:28","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"gmail.com 26-04-2025 17:28","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Important","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Important","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Show navigation bar","depth":13,"bounds":{"left":0.3013889,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show navigation bar","depth":15,"bounds":{"left":0.30625,"top":0.0,"width":0.047569446,"height":0.06388889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Your current storage: 17.76 MB / 500.00 MB","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"17.76 MB / 500.00 MB","depth":11,"bounds":{"left":0.16388889,"top":0.0,"width":0.071875,"height":0.013888889},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"17.76 MB","depth":12,"bounds":{"left":0.16388889,"top":0.0,"width":0.029513888,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"bounds":{"left":0.19340278,"top":0.0,"width":0.00625,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"500.00 MB","depth":12,"bounds":{"left":0.19965278,"top":0.0,"width":0.036111113,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Proton Mail 5.0.111.4","depth":11,"bounds":{"left":0.29444444,"top":0.0,"width":0.02638889,"height":0.015555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Proton Mail","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.0.111.4","depth":12,"bounds":{"left":0.29444444,"top":0.0,"width":0.02638889,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search messages","depth":12,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Upgrade","depth":13,"help_text":"Go to subscription plans","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Upgrade","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Attention required Toggle settings","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Attention required","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Toggle settings","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"kovaliklukas kovaliklukas@proton.me","depth":13,"help_text":"kovaliklukas <kovaliklukas@proton.me>","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"kovaliklukas","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"kovaliklukas@proton.me","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Conversation list 56 unread messages","depth":15,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation list","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"56 unread messages","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Select all messages","depth":19,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select all messages","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Inbox","depth":17,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Inbox","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More","depth":17,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"All","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Read","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Unread","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Has attachments","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Sort conversations","depth":17,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Previous page","depth":17,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Previous page","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"3/4","depth":17,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Next page","depth":17,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Next page","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Upgrade to level up your privacy.","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Upgrade","depth":16,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Close","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star conversation","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Star conversation","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unread email","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Matúš Kostolný Denník N","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2 messages in conversation Šutaj Eštok v bakalárke: Pracovný deň začíname skontrolovaním e-mailovej schránky","depth":17,"help_text":"Šutaj Eštok v bakalárke: Pracovný deň začíname skontrolovaním e-mailovej schránky","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2 messages in conversation","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Šutaj Eštok v bakalárke: Pracovný deň začíname skontrolovaním e-mailovej schránky","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Friday, December 19th, 2025 at 10:52 AM","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star conversation","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Star conversation","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ranných 5 minút | Denník N","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Fico na kľúčovom samite odmietol garancie na pôžičku Ukrajine | Vyše 150 prokurátorov sa postavilo proti novele | Zverejnili spoločnú fotku Lajčáka a Epsteina","depth":17,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fico na kľúčovom samite odmietol garancie na pôžičku Ukrajine | Vyše 150 prokurátorov sa postavilo proti novele | Zverejnili spoločnú fotku Lajčáka a Epsteina","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Friday, December 19th, 2025 at 8:24 AM","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star conversation","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Star conversation","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unread email","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ranných 5 minút | Denník N","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Vládne zákony narazili na Ústavný súd | Od koalície odišlo už pol milióna voličov | Rusko pritvrdzuje proti Európe | Vysvetľujeme zmeny pri predaji áut po roku 2035","depth":17,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vládne zákony narazili na Ústavný súd | Od koalície odišlo už pol milióna voličov | Rusko pritvrdzuje proti Európe | Vysvetľujeme zmeny pri predaji áut po roku 2035","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Thursday, December 18th, 2025 at 8:00 AM","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star conversation","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Star conversation","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unread email","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ranných 5 minút | Denník N","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Pavol Gašpar podrazil českú tajnú službu | Čo sme našli v diplomovke a bakalárke Šutaja Eštoka | K opozičnému protestu sa prvýkrát pripojila Maďarská aliancia","depth":17,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pavol Gašpar podrazil českú tajnú službu | Čo sme našli v diplomovke a bakalárke Šutaja Eštoka | K opozičnému protestu sa prvýkrát pripojila Maďarská aliancia","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Wednesday, December 17th, 2025 at 7:52 AM","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star conversation","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Star conversation","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unread email","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ranných 5 minút | Denník N","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Prenikli sme do sveta slovenských manfluencerov | V desiatke miest budú opozičné protesty | Strelca na pláži v Sydney zneškodnil moslimský predavač ovocia","depth":17,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Prenikli sme do sveta slovenských manfluencerov | V desiatke miest budú opozičné protesty | Strelca na pláži v Sydney zneškodnil moslimský predavač ovocia","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tuesday, December 16th, 2025 at 7:51 AM","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star conversation","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Star conversation","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Unread email","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ranných 5 minút | Denník N","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Medzi obeťami útoku v Sydney je aj Slovenka | Kaliňák neočakáva veto trestnej novely | Zelenskyj pripustil kompromis pri NATO","depth":17,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Medzi obeťami útoku v Sydney je aj Slovenka | Kaliňák neočakáva veto trestnej novely | Zelenskyj pripustil kompromis pri NATO","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Monday, December 15th, 2025 at 9:16 AM","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8796674529228854074
|
6373923099435979341
|
idle
|
accessibility
|
NULL
|
Today's Deals
amazon.com
DXP4800PLUS-B5F8
5 Si Today's Deals
amazon.com
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
Close tab
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
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
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Proton Mail
needs your permission to
enable desktop notifications
.
Close this banner
Close this banner
Proton Mail
Proton Mail
Proton Mail
Proton applications
New message
Navigation
Navigation
Inbox 56 unread conversations
Inbox
56
Drafts
Drafts
Sent
Sent
Starred
Starred
More
More
More
More
Views
Views
Views
Views
Newsletters
Newsletters
Folders
Folders
Folders
Folders
Create a new folder
Create a new folder
Manage your folders
Manage your folders
Labels
Labels
Labels
Labels
Create a new label
Create a new label
Manage your labels
Manage your labels
gmail.com 26-04-2025 17:28
gmail.com 26-04-2025 17:28
Important
Important
Show navigation bar
Show navigation bar
Your current storage: 17.76 MB / 500.00 MB
17.76 MB / 500.00 MB
17.76 MB
/
500.00 MB
Proton Mail [IP_ADDRESS]
Proton Mail
[IP_ADDRESS]
Search
Search
Search messages
Upgrade
Upgrade
Attention required Toggle settings
Attention required
Toggle settings
kovaliklukas [EMAIL]
kovaliklukas
[EMAIL]
Conversation list 56 unread messages
Conversation list
56 unread messages
Select all messages
Select all messages
Inbox
Inbox
More
More
All
Read
Unread
Has attachments
Sort conversations
Previous page
Previous page
3/4
3
/
4
Next page
Next page
Upgrade to level up your privacy.
Upgrade
Close
Close
Star conversation
Star conversation
Unread email
Matúš Kostolný Denník N
2 messages in conversation Šutaj Eštok v bakalárke: Pracovný deň začíname skontrolovaním e-mailovej schránky
2 messages in conversation
Šutaj Eštok v bakalárke: Pracovný deň začíname skontrolovaním e-mailovej schránky
Friday, December 19th, 2025 at 10:52 AM
Star conversation
Star conversation
Ranných 5 minút | Denník N
Fico na kľúčovom samite odmietol garancie na pôžičku Ukrajine | Vyše 150 prokurátorov sa postavilo proti novele | Zverejnili spoločnú fotku Lajčáka a Epsteina
Fico na kľúčovom samite odmietol garancie na pôžičku Ukrajine | Vyše 150 prokurátorov sa postavilo proti novele | Zverejnili spoločnú fotku Lajčáka a Epsteina
Friday, December 19th, 2025 at 8:24 AM
Star conversation
Star conversation
Unread email
Ranných 5 minút | Denník N
Vládne zákony narazili na Ústavný súd | Od koalície odišlo už pol milióna voličov | Rusko pritvrdzuje proti Európe | Vysvetľujeme zmeny pri predaji áut po roku 2035
Vládne zákony narazili na Ústavný súd | Od koalície odišlo už pol milióna voličov | Rusko pritvrdzuje proti Európe | Vysvetľujeme zmeny pri predaji áut po roku 2035
Thursday, December 18th, 2025 at 8:00 AM
Star conversation
Star conversation
Unread email
Ranných 5 minút | Denník N
Pavol Gašpar podrazil českú tajnú službu | Čo sme našli v diplomovke a bakalárke Šutaja Eštoka | K opozičnému protestu sa prvýkrát pripojila Maďarská aliancia
Pavol Gašpar podrazil českú tajnú službu | Čo sme našli v diplomovke a bakalárke Šutaja Eštoka | K opozičnému protestu sa prvýkrát pripojila Maďarská aliancia
Wednesday, December 17th, 2025 at 7:52 AM
Star conversation
Star conversation
Unread email
Ranných 5 minút | Denník N
Prenikli sme do sveta slovenských manfluencerov | V desiatke miest budú opozičné protesty | Strelca na pláži v Sydney zneškodnil moslimský predavač ovocia
Prenikli sme do sveta slovenských manfluencerov | V desiatke miest budú opozičné protesty | Strelca na pláži v Sydney zneškodnil moslimský predavač ovocia
Tuesday, December 16th, 2025 at 7:51 AM
Star conversation
Star conversation
Unread email
Ranných 5 minút | Denník N
Medzi obeťami útoku v Sydney je aj Slovenka | Kaliňák neočakáva veto trestnej novely | Zelenskyj pripustil kompromis pri NATO
Medzi obeťami útoku v Sydney je aj Slovenka | Kaliňák neočakáva veto trestnej novely | Zelenskyj pripustil kompromis pri NATO
Monday, December 15th, 2025 at 9:16 AM...
|
NULL
|
|
26887
|
567
|
8
|
2026-04-15T13:35:48.103422+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776260148103_m2.jpg...
|
Boosteroid
|
Boosteroid
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
4913733847682115121/135Imperial Age--Warning: You 4913733847682115121/135Imperial Age--Warning: You are being attacked byPlayer 6 László I!!!--Halberdier Created---Lumber Camp Built-Click a villager to gather wood from this tree.5 Magnus Olafsson: 19165/19165NV8 Almish Yiltawar: 16109/161091 kovaliklukas: 16052/16052N2 Rajyapala: 15739/15739CNV6 László I: 11372/113727 Maximilian of Habsburg: 7147/7147 IV4 Louis VI: 6836/6836 3 IV3 Huascár: 6447/6447 IV...
|
NULL
|
8796222029587196687
|
NULL
|
click
|
ocr
|
NULL
|
4913733847682115121/135Imperial Age--Warning: You 4913733847682115121/135Imperial Age--Warning: You are being attacked byPlayer 6 László I!!!--Halberdier Created---Lumber Camp Built-Click a villager to gather wood from this tree.5 Magnus Olafsson: 19165/19165NV8 Almish Yiltawar: 16109/161091 kovaliklukas: 16052/16052N2 Rajyapala: 15739/15739CNV6 László I: 11372/113727 Maximilian of Habsburg: 7147/7147 IV4 Louis VI: 6836/6836 3 IV3 Huascár: 6447/6447 IV...
|
26885
|
|
35139
|
719
|
25
|
2026-04-16T09:41:42.294083+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776332502294_m2.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelp= app.staging.jiminny.com/connect/zohocrm7 Jiminny x Shiji - Reconnecting theZ For you - Confluence® Lukas Kovalik - Time Offu Product Growth Plattorm Userpilou Userpilotfix(security): composer depender8 JiminnyNew Taba Jiminny© coosloIntegrationAccessor Membraneal Jiminny Membrane§. Fix an autocomplete mistake that sSymfony|Component|Debug|Excep] App "Zoho CRM" . Kavita • Membra+ New TabGooglegoogle.comJIMINNYAccount disconnectedIt looks like your Zoho CRM account has becomedisconnectedPlease re-connect to continuecm Sign in with Zoho CRMJY-18909-automated-reports-ask-iiminny871913j Support Daily • in 2h 19m100% C4Thu 16 Apr 12:41:42status200204200200200206204200204200204200294200294200200204200204200204200206200200200200200200200200200200200200200200200200200200200200200200200200200200200200200InspectorFilter URLs• Console• DebuggerT Network{) Style Editor( Performancemetn..POSTOPT...POSTPosIPOSTOPTI...GETOPTI...POSTOPTI...GETOPII..POSTOPII.GETOPTI...GETOPTI...POSTOPTRPOSTPOSTPOSTPOSTPOSTPOSTPOSTPOs IPOSTPOSTPOSTPOSTPOSTPOSTPOSTPOS IPOSTPOSTPOSTPOSTPOSTPOSTPOSTPOSTPOSTPOSTPOSI59 requestsDomalnInitiatorTypeA api.getmembran..index-DOkdLA... isonA api.getmembran...connection-optionsplainAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrSonapi-lam.interco…metricsframe.53614f...htmlAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonaoi.ceumemoran.A api.getmembran...self-auth-contextplainapi.getmembran.zonocrmIndex-DokalA... SonA api.getmembran...zohocrmplainA api.getmembran.index-DOkdLA...Json• api.getmembran...connection-ootionsplainA api.getmembran..66fe6c913202f3a165e3c14dindex-DOkdLA... jsonapi.getmembran…bbtebc91320213a1bbesc14dplainA api.getmembran...conneetion-optionsindex-DOkdLA... jsonapi.getmembran…connection-optionsplainA api.getmembran...1u5pyo6rg9fOu790j5tfs4?token=eyJ0eXAiOi. index-DOkdLA...^ api.getmembran.self-auth-contextindex-Dokala.. SonA api.getmembran...self-auth-contextplainA api.getmembran..zonocrmindex-DOkdLA...JsonA api.getmembran….zohocrmplainA api.getmembran...connection"ootionsindex-DOkdLA... json"api.cetmemoran..connection-ootionsplainAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonr.logr-in.comYa=ponxat plattorm-staging&r=b-019d95/a xhijsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonr.locl-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonr.locl-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrsonAr.logr-in.comTasoonxatlo attorm-staginaxr=b-019095a xhijsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrSonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonr.loel-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrSonAr.logr-in.comTrasoonxatlo attorm-staqinaxr=b-019095 a xhijsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a [EMAIL]"a=oonxar olatrorm-stacinear=o-uisaso/a [EMAIL]?a=ponxaf/platform-staging&r=6-019d957a xhrAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrJsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrSonr.logr-in.comYa=ponxat plattorm-staging&r=b-019d9b/a xhijson79.64 kB / 125.52 kB transferredFinish: 62.54 min: Memorye StorageTransferred1.05 kB 271774 B12.15 kB 0E1.05 KB6.38 kB 0E1.55 kb740 B 0E1.68 kB7638 0E1.05 kB776 B1.68 kB 1.7:15/BOE1.05 kB 2711/2B1.54 kB 79:1.93 kB740B0:1.69 kB 1.7:757 B1.05 kB 2712.43 kB 0 EL.41kB02.44 kB 0E2.45 kB 0 E2.43 kB 0 B2.44 kB2.44 KB 0E2.43 kB 0 E2.44 kB 0 E2.45 kB 0 B2.46 kB2.49 kB 0E2.43 kB 0 E2.45 kB 0 E2.44 kB2.43 kB 0 E2.47 kB 0 E245K302.46 kB 0 E246kb2.46 kB 0E2.19 KB2.20 KB 0:L11 KD2.34 kB 0 E2.47 kB 0E2.47 kBOE2.29 kB 0 E404 K32.22 kB 0E2.11 kBOEi Accessibility88 Application0 99+AlI HITMLoOkIesKecuestFontsmages Media WsResponseliminesslack lldce_ Disable Cache No Throttling + 50:SecuritymeddersP Filter propertiesJSONId: "botebce1sz021salbbesc140"name: "Zoho CRM"uuid: "e02598b1-2f23-4f88-8fa8-8d9f9d420f89™key: "zohocrm"state: "READY"errors:createdAt: "2024-10-03T10:06:09.911Z"updatedAt: "2025-07-03T06:31:13.107Z'sDeactivated: talselogoUri: "[URL_WITH_CREDENTIALS]...
|
NULL
|
8796090638051080253
|
NULL
|
click
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelp= app.staging.jiminny.com/connect/zohocrm7 Jiminny x Shiji - Reconnecting theZ For you - Confluence® Lukas Kovalik - Time Offu Product Growth Plattorm Userpilou Userpilotfix(security): composer depender8 JiminnyNew Taba Jiminny© coosloIntegrationAccessor Membraneal Jiminny Membrane§. Fix an autocomplete mistake that sSymfony|Component|Debug|Excep] App "Zoho CRM" . Kavita • Membra+ New TabGooglegoogle.comJIMINNYAccount disconnectedIt looks like your Zoho CRM account has becomedisconnectedPlease re-connect to continuecm Sign in with Zoho CRMJY-18909-automated-reports-ask-iiminny871913j Support Daily • in 2h 19m100% C4Thu 16 Apr 12:41:42status200204200200200206204200204200204200294200294200200204200204200204200206200200200200200200200200200200200200200200200200200200200200200200200200200200200200200InspectorFilter URLs• Console• DebuggerT Network{) Style Editor( Performancemetn..POSTOPT...POSTPosIPOSTOPTI...GETOPTI...POSTOPTI...GETOPII..POSTOPII.GETOPTI...GETOPTI...POSTOPTRPOSTPOSTPOSTPOSTPOSTPOSTPOSTPOs IPOSTPOSTPOSTPOSTPOSTPOSTPOSTPOS IPOSTPOSTPOSTPOSTPOSTPOSTPOSTPOSTPOSTPOSTPOSI59 requestsDomalnInitiatorTypeA api.getmembran..index-DOkdLA... isonA api.getmembran...connection-optionsplainAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrSonapi-lam.interco…metricsframe.53614f...htmlAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonaoi.ceumemoran.A api.getmembran...self-auth-contextplainapi.getmembran.zonocrmIndex-DokalA... SonA api.getmembran...zohocrmplainA api.getmembran.index-DOkdLA...Json• api.getmembran...connection-ootionsplainA api.getmembran..66fe6c913202f3a165e3c14dindex-DOkdLA... jsonapi.getmembran…bbtebc91320213a1bbesc14dplainA api.getmembran...conneetion-optionsindex-DOkdLA... jsonapi.getmembran…connection-optionsplainA api.getmembran...1u5pyo6rg9fOu790j5tfs4?token=eyJ0eXAiOi. index-DOkdLA...^ api.getmembran.self-auth-contextindex-Dokala.. SonA api.getmembran...self-auth-contextplainA api.getmembran..zonocrmindex-DOkdLA...JsonA api.getmembran….zohocrmplainA api.getmembran...connection"ootionsindex-DOkdLA... json"api.cetmemoran..connection-ootionsplainAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonr.logr-in.comYa=ponxat plattorm-staging&r=b-019d95/a xhijsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonr.locl-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonr.locl-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrsonAr.logr-in.comTasoonxatlo attorm-staginaxr=b-019095a xhijsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrSonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonr.loel-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrSonAr.logr-in.comTrasoonxatlo attorm-staqinaxr=b-019095 a xhijsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a [EMAIL]"a=oonxar olatrorm-stacinear=o-uisaso/a [EMAIL]?a=ponxaf/platform-staging&r=6-019d957a xhrAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrJsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrjsonAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d957a xhrSonr.logr-in.comYa=ponxat plattorm-staging&r=b-019d9b/a xhijson79.64 kB / 125.52 kB transferredFinish: 62.54 min: Memorye StorageTransferred1.05 kB 271774 B12.15 kB 0E1.05 KB6.38 kB 0E1.55 kb740 B 0E1.68 kB7638 0E1.05 kB776 B1.68 kB 1.7:15/BOE1.05 kB 2711/2B1.54 kB 79:1.93 kB740B0:1.69 kB 1.7:757 B1.05 kB 2712.43 kB 0 EL.41kB02.44 kB 0E2.45 kB 0 E2.43 kB 0 B2.44 kB2.44 KB 0E2.43 kB 0 E2.44 kB 0 E2.45 kB 0 B2.46 kB2.49 kB 0E2.43 kB 0 E2.45 kB 0 E2.44 kB2.43 kB 0 E2.47 kB 0 E245K302.46 kB 0 E246kb2.46 kB 0E2.19 KB2.20 KB 0:L11 KD2.34 kB 0 E2.47 kB 0E2.47 kBOE2.29 kB 0 E404 K32.22 kB 0E2.11 kBOEi Accessibility88 Application0 99+AlI HITMLoOkIesKecuestFontsmages Media WsResponseliminesslack lldce_ Disable Cache No Throttling + 50:SecuritymeddersP Filter propertiesJSONId: "botebce1sz021salbbesc140"name: "Zoho CRM"uuid: "e02598b1-2f23-4f88-8fa8-8d9f9d420f89™key: "zohocrm"state: "READY"errors:createdAt: "2024-10-03T10:06:09.911Z"updatedAt: "2025-07-03T06:31:13.107Z'sDeactivated: talselogoUri: "[URL_WITH_CREDENTIALS]...
|
NULL
|
|
22508
|
488
|
56
|
2026-04-15T10:43:20.791121+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776249800791_m1.jpg...
|
Boosteroid
|
Boosteroid
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackFileEditViewGoHistoryWindowHelpEDHomeDMsActi +SlackFileEditViewGoHistoryWindowHelpEDHomeDMsActivityFilesLater..•More+→Search Jiminny IncJiminny ...abExternal connections# Starred& platform-inner-teamChannels# 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 jimi...Direct messagesStoyan Tanev• Ves@ Cala DimitravoStoyan Tanev6 0• MessagesAdd canvasO Filesstoyan tanevT'SZ PIMДобре,Thursday, March 26thcrm: sync-opportunity--teamId+php artisan--fromLukas Kovalik 1:53 PMда и добави стратегия ако искаш на задH1Today ~NewStoyan Tanev E1:24 PMЗдрасти, имаме ли логове от конектвания наинтеграция?понеже сега бях на среща с клиент итръгнахме да вързваме Зохо, и просто серефрешва страницатаи пак ни врьща в началотоhttps://app.jiminny.com/export/wmbfq6UIOHluXIRatejU6t6PHzAhyVUdNiObCr2tOHy6fLwooNJTALukas Kovalik 1:33 PMздрасти, трябва да го прегледам, но почтисьм сигурен че не е при нас, ако се наложище пиша на intergration-appможе ли да отвориш тикет?Stoyan Tanev |Да пускам го1:34 PMMessage Stoyan TanevIn a meeting • Googl...+Aa(all• Support Daily - in 1h 17 mRActivity MonitorAll ProcessesProcess NameBoosteroidWindowServerFirefoxCP Isolated Web ContentFirefoxFirefoxCursorUlViewService (Not Responding)FirefoxCP Isolated Web ContentVTDecoderXPCServiceFirefox GPU HelperFirefoxCP Isolated Web ContentSlack Helper (Renderer)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefox GPU HelperFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentNotion Calendar Helper (Renderer)claudeFirefoxCP Isolated Web ContentNotion Helper (Renderer)FirefoxCP Isolated Web ContentiTerm2Claude Helper (Renderer)FirefoxCP Isolated Web ContentClaudeFirefoxCP Isolated Web ContentMEMORY PRESSUREMem...2,15 GB1,12 GB958,0 MB884,2 MB843,0 MB760,8 MB727,6 MB593,4 MB524,5 MB476,0 MB438,1 MB427,4 MB425,5 MB425,5 MB424,5 MB391,1 MB377,7 MB370,5 MB338,4 MB327,9 MB320,6 MB316,3 MB296,5 MB276,8 MB239,1 MB230,0 MB190,4 MB184,9 MBPhysical Memory:Memory Used:Cached Files:Swap Used:100% <478Wed 15 Apr 13:43:20CPUMemoryDiskThreads38232677842512262515232330262726221513242127715266027EnergyPorts60119 1361257431 20319 350124169251127185118120245124125126119172721203281241 788209122718126PID74060407429748014146648424203074065146733671341863354803527680193583143652430164817326548509103689811483583348786051956138604914829816,00 GB13,67 GB<2,30 GB3,53 GBApp Memory:Wired Memory:Compressed:NetworkUserlukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas4,62 GB2,97 GB5,49 GB...
|
NULL
|
8795914399309738151
|
NULL
|
click
|
ocr
|
NULL
|
+SlackFileEditViewGoHistoryWindowHelpEDHomeDMsActi +SlackFileEditViewGoHistoryWindowHelpEDHomeDMsActivityFilesLater..•More+→Search Jiminny IncJiminny ...abExternal connections# Starred& platform-inner-teamChannels# 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 jimi...Direct messagesStoyan Tanev• Ves@ Cala DimitravoStoyan Tanev6 0• MessagesAdd canvasO Filesstoyan tanevT'SZ PIMДобре,Thursday, March 26thcrm: sync-opportunity--teamId+php artisan--fromLukas Kovalik 1:53 PMда и добави стратегия ако искаш на задH1Today ~NewStoyan Tanev E1:24 PMЗдрасти, имаме ли логове от конектвания наинтеграция?понеже сега бях на среща с клиент итръгнахме да вързваме Зохо, и просто серефрешва страницатаи пак ни врьща в началотоhttps://app.jiminny.com/export/wmbfq6UIOHluXIRatejU6t6PHzAhyVUdNiObCr2tOHy6fLwooNJTALukas Kovalik 1:33 PMздрасти, трябва да го прегледам, но почтисьм сигурен че не е при нас, ако се наложище пиша на intergration-appможе ли да отвориш тикет?Stoyan Tanev |Да пускам го1:34 PMMessage Stoyan TanevIn a meeting • Googl...+Aa(all• Support Daily - in 1h 17 mRActivity MonitorAll ProcessesProcess NameBoosteroidWindowServerFirefoxCP Isolated Web ContentFirefoxFirefoxCursorUlViewService (Not Responding)FirefoxCP Isolated Web ContentVTDecoderXPCServiceFirefox GPU HelperFirefoxCP Isolated Web ContentSlack Helper (Renderer)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefox GPU HelperFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentNotion Calendar Helper (Renderer)claudeFirefoxCP Isolated Web ContentNotion Helper (Renderer)FirefoxCP Isolated Web ContentiTerm2Claude Helper (Renderer)FirefoxCP Isolated Web ContentClaudeFirefoxCP Isolated Web ContentMEMORY PRESSUREMem...2,15 GB1,12 GB958,0 MB884,2 MB843,0 MB760,8 MB727,6 MB593,4 MB524,5 MB476,0 MB438,1 MB427,4 MB425,5 MB425,5 MB424,5 MB391,1 MB377,7 MB370,5 MB338,4 MB327,9 MB320,6 MB316,3 MB296,5 MB276,8 MB239,1 MB230,0 MB190,4 MB184,9 MBPhysical Memory:Memory Used:Cached Files:Swap Used:100% <478Wed 15 Apr 13:43:20CPUMemoryDiskThreads38232677842512262515232330262726221513242127715266027EnergyPorts60119 1361257431 20319 350124169251127185118120245124125126119172721203281241 788209122718126PID74060407429748014146648424203074065146733671341863354803527680193583143652430164817326548509103689811483583348786051956138604914829816,00 GB13,67 GB<2,30 GB3,53 GBApp Memory:Wired Memory:Compressed:NetworkUserlukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas4,62 GB2,97 GB5,49 GB...
|
NULL
|
|
27220
|
569
|
58
|
2026-04-15T13:44:07.463542+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776260647463_m1.jpg...
|
Boosteroid
|
Boosteroid
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackFileEditViewGoEDHomeActivity..•More+HistoryW +SlackFileEditViewGoEDHomeActivity..•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 VasilevSteliyan GeorgievAdelina Petrova, Ili...P. Adelina PetrovaD. Nikolay Nikolov2 Galya Dimitrova, Ni...ii: AppsToastJira Cloud# releases8 22Messagesnewdou+O Files• Bookmarksv 2 new messagesGitHub APP3:28 PM7 new commits pushed tomaster by nikolay-yankovNew24b989ee - Enhance SECFIXdocumentation and policiesa3a0a742 - Update SECFIX Slack channelreference in documentation and workflowfiles071c999d - Merge branch 'master' intoimprove-secfix-bot-15-04-2026981e9a1a - Update SECFIX_PROMPT.mdto enhance clarity on upgrade safety andchangelog reviews6e938e53 - Enhance SECFIX workflow withSlack notification optionsShow more( jiminny/app Added by GitHubCircleCl APP3:53 PMDeployment Successful!Project: appWhen:04/15/202612:53:30Tag:View JobMessage #releases+Aa...Activity MonitorAll ProcessesProcess NameBoosteroidWindowServerFirefoxFirefoxCP Isolated Web ContentFirefoxCursorUlViewService (Not Responding)FirefoxCP Isolated Web ContentFirefox GPU HelperFirefoxCP Isolated Web ContentFirefox GPU HelperVTDecoderXPCServiceFirefoxCP Isolated Web ContentSlack Helper (Renderer)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentNotion Calendar Helper (Renderer)claudeClaude Helper (Renderer)Notion Helper (Renderer)FirefoxCP Isolated Web ContentiTerm2FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentscreenpipeMEMORY PRESSUREMem...2,03 GB1,20 GB995,0 MB962,7 MB836,8 MB793,5 MB783,8 MB554,1 MB547,3 MB543,9 MB516,1 MB464,4 MB460,0 MB443,0 MB426,1 MB392,5 MB391,2 MB389,7 MB372,5 MB343,3 MB326,1 MB325,1 MB319,7 MB298,3 MB251,8 MB243,3 MB242,6 MB235,2 MBPhysical Memory:Memory Used:Cached Files:Swap Used:100% <478Wed 15 Apr 16:44:07CPUMemoryDiskThreads3923732584282924271224152425262623221513152128272861EnergyPorts60819 7557231241 20120 019130242126254168120185124123124127120119172722203281261 835125129518PID93892407801442974146648424203080193671314673938993548041863352763583143652430163689848173265485091060519114835833487856138482984287616,00 GB14,20 GB<1,74 GB2,90 GBApp Memory:Wired Memory:Compressed:NetworkUserlukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas3,66 GB2,91 GB7,08 GB...
|
NULL
|
8795817662028573611
|
NULL
|
click
|
ocr
|
NULL
|
+SlackFileEditViewGoEDHomeActivity..•More+HistoryW +SlackFileEditViewGoEDHomeActivity..•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 VasilevSteliyan GeorgievAdelina Petrova, Ili...P. Adelina PetrovaD. Nikolay Nikolov2 Galya Dimitrova, Ni...ii: AppsToastJira Cloud# releases8 22Messagesnewdou+O Files• Bookmarksv 2 new messagesGitHub APP3:28 PM7 new commits pushed tomaster by nikolay-yankovNew24b989ee - Enhance SECFIXdocumentation and policiesa3a0a742 - Update SECFIX Slack channelreference in documentation and workflowfiles071c999d - Merge branch 'master' intoimprove-secfix-bot-15-04-2026981e9a1a - Update SECFIX_PROMPT.mdto enhance clarity on upgrade safety andchangelog reviews6e938e53 - Enhance SECFIX workflow withSlack notification optionsShow more( jiminny/app Added by GitHubCircleCl APP3:53 PMDeployment Successful!Project: appWhen:04/15/202612:53:30Tag:View JobMessage #releases+Aa...Activity MonitorAll ProcessesProcess NameBoosteroidWindowServerFirefoxFirefoxCP Isolated Web ContentFirefoxCursorUlViewService (Not Responding)FirefoxCP Isolated Web ContentFirefox GPU HelperFirefoxCP Isolated Web ContentFirefox GPU HelperVTDecoderXPCServiceFirefoxCP Isolated Web ContentSlack Helper (Renderer)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentNotion Calendar Helper (Renderer)claudeClaude Helper (Renderer)Notion Helper (Renderer)FirefoxCP Isolated Web ContentiTerm2FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentscreenpipeMEMORY PRESSUREMem...2,03 GB1,20 GB995,0 MB962,7 MB836,8 MB793,5 MB783,8 MB554,1 MB547,3 MB543,9 MB516,1 MB464,4 MB460,0 MB443,0 MB426,1 MB392,5 MB391,2 MB389,7 MB372,5 MB343,3 MB326,1 MB325,1 MB319,7 MB298,3 MB251,8 MB243,3 MB242,6 MB235,2 MBPhysical Memory:Memory Used:Cached Files:Swap Used:100% <478Wed 15 Apr 16:44:07CPUMemoryDiskThreads3923732584282924271224152425262623221513152128272861EnergyPorts60819 7557231241 20120 019130242126254168120185124123124127120119172722203281261 835125129518PID93892407801442974146648424203080193671314673938993548041863352763583143652430163689848173265485091060519114835833487856138482984287616,00 GB14,20 GB<1,74 GB2,90 GBApp Memory:Wired Memory:Compressed:NetworkUserlukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas3,66 GB2,91 GB7,08 GB...
|
27218
|
|
13745
|
303
|
7
|
2026-04-14T12:52:10.641269+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776171130641_m2.jpg...
|
Firefox
|
JY-18909 Add Ask Jiminny Report type in list by ni JY-18909 Add Ask Jiminny Report type in list by nikolay-yankov · Pull Request #11894 · jiminny/app — Work...
|
True
|
github.com/jiminny/app/pull/11894
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
JY-18909 Add Ask Jiminny Report type in list by ni JY-18909 Add Ask Jiminny Report type in list by nikolay-yankov · Pull Request #11894 · jiminny/app
Pipelines - jiminny/app
Feed — jiminny — Sentry
Your Tuesday report report is ready - [EMAIL] - Jiminny Mail
JY-18909 Add Ask Jiminny Report type in list by nikolay-yankov · Pull Request #11894 · jiminny/app
JY-18909 Add Ask Jiminny Report type in list by nikolay-yankov · Pull Request #11894 · jiminny/app
Close tab
Issues - app in Jiminny SonarQube Cloud
Issues - app in Jiminny SonarQube Cloud
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
Console Home | Console Home | us-east-2
Console Home | Console Home | us-east-2
SecurityGroup | EC2 | us-east-2
SecurityGroup | EC2 | us-east-2
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
New Tab
New Tab
CloudWatch | us-east-2
CloudWatch | us-east-2
Jy 20541 stale records pr 1 by Vasil-Jiminny · Pull Request #11949 · jiminny/app
Jy 20541 stale records pr 1 by Vasil-Jiminny · Pull Request #11949 · jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
Issues(g then i)
Pull requests
Repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (29)
Pull requests
(
29
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (24)
Security and quality
(
24
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
JY-18909 Add Ask Jiminny Report type in list #11894 Edit title
JY-18909 Add Ask Jiminny Report type in list
#
11894
Edit title
Awaiting approval
Awaiting approval
Code
Code
Open
nikolay-yankov
nikolay-yankov
wants to merge 35 commits into
master
master
from
JY-18909-automated-reports-ask-jiminny
JY-18909-automated-reports-ask-jiminny
Copy head branch name to clipboard
Lines changed: 2731 additions & 256 deletions
Conversation (6)
Conversation
(
6
)
Commits (35)
Commits
(
35
)
Checks (3)
Checks
(
3
)
Files changed (37)
Files changed
(
37
)
Conversation
Conversation
@nikolay-yankov
Show options
nikolay-yankov commented 2 weeks ago •
nikolay-yankov
nikolay-yankov
commented
2 weeks ago
2 weeks ago
•
edited
edited
JIRA: JY-18909
JIRA:
JY-18909
JY-18909
Deployment notes:
Deployment notes:
We need the new queue to be deployed first by Ves
DO NOT merge before that
Add or remove reactions
@nikolay-yankov
JY-18909
JY-18909
Add Ask Jiminny Report type in list
Add Ask Jiminny Report type in list
3 / 7 checks OK
8fb6884
8fb6884
windsurf-bot[bot]
windsurf-bot
windsurf-bot
bot
reviewed
2 weeks ago
2 weeks ago
View reviewed changes
View reviewed changes
Show options
windsurf-bot bot left a comment
windsurf-bot
windsurf-bot
bot
left a comment
💡
To request another review, post a new comment with "/windsurf-review".
Add or remove reactions
Expand comment thread...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"JY-18909 Add Ask Jiminny Report type in list by nikolay-yankov · Pull Request #11894 · jiminny/app","depth":4,"bounds":{"left":0.00234375,"top":0.045138888,"width":0.022265624,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.024609376,"top":0.045138888,"width":0.022265624,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"bounds":{"left":0.046875,"top":0.045138888,"width":0.022265624,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Your Tuesday report report is ready - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"bounds":{"left":0.06914063,"top":0.045138888,"width":0.022265624,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"JY-18909 Add Ask Jiminny Report type in list by nikolay-yankov · Pull Request #11894 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08263889,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-18909 Add Ask Jiminny Report type in list by nikolay-yankov · Pull Request #11894 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.09236111,"width":0.20234375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.07890625,"top":0.08888889,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Issues - app in Jiminny SonarQube Cloud","depth":4,"bounds":{"left":0.0,"top":0.11111111,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues - app in Jiminny SonarQube Cloud","depth":5,"bounds":{"left":0.015625,"top":0.12083333,"width":0.083984375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.13958333,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.015625,"top":0.14930555,"width":0.11796875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.16805555,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.17777778,"width":0.18710938,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"bounds":{"left":0.0,"top":0.19652778,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":5,"bounds":{"left":0.015625,"top":0.20625,"width":0.1515625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Console Home | Console Home | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.225,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Console Home | Console Home | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.23472223,"width":0.08671875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SecurityGroup | EC2 | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.2534722,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SecurityGroup | EC2 | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.26319444,"width":0.06484375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.28194445,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.29166666,"width":0.18710938,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.31041667,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.3201389,"width":0.23476562,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":4,"bounds":{"left":0.0,"top":0.33888888,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":5,"bounds":{"left":0.015625,"top":0.34861112,"width":0.1984375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.3673611,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.015625,"top":0.37708333,"width":0.015625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":4,"bounds":{"left":0.0,"top":0.39583334,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":5,"bounds":{"left":0.015625,"top":0.40555555,"width":0.1640625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.42430556,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.015625,"top":0.4340278,"width":0.12617187,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.45277777,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.4625,"width":0.18710938,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"bounds":{"left":0.0,"top":0.48125,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":5,"bounds":{"left":0.015625,"top":0.49097222,"width":0.1515625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.50972223,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.015625,"top":0.51944447,"width":0.017578125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.5381944,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.54791665,"width":0.0484375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20541 stale records pr 1 by Vasil-Jiminny · Pull Request #11949 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.56666666,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20541 stale records pr 1 by Vasil-Jiminny · Pull Request #11949 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.5763889,"width":0.16210938,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.003125,"top":0.59652776,"width":0.08710937,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.003125,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.01640625,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.029296875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0421875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.05546875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to content","depth":7,"bounds":{"left":0.09375,"top":0.045138888,"width":0.000390625,"height":0.00069444446},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":8,"bounds":{"left":0.09375,"top":0.046527777,"width":0.003515625,"height":0.18680556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":11,"bounds":{"left":0.1,"top":0.05625,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":10,"bounds":{"left":0.1171875,"top":0.05625,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":13,"bounds":{"left":0.1328125,"top":0.05625,"width":0.022265624,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":15,"bounds":{"left":0.13515624,"top":0.061805554,"width":0.017578125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":13,"bounds":{"left":0.1609375,"top":0.05625,"width":0.02109375,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":15,"bounds":{"left":0.16328125,"top":0.061805554,"width":0.01015625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":10,"bounds":{"left":0.7792969,"top":0.05625,"width":0.07734375,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":13,"bounds":{"left":0.79375,"top":0.061805554,"width":0.0140625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":13,"bounds":{"left":0.809375,"top":0.0625,"width":0.002734375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":13,"bounds":{"left":0.8140625,"top":0.061805554,"width":0.025,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":11,"bounds":{"left":0.85898435,"top":0.05625,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":10,"bounds":{"left":0.87109375,"top":0.05625,"width":0.01015625,"height":0.022222223},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":10,"bounds":{"left":0.890625,"top":0.05625,"width":0.01953125,"height":0.022222223},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Issues(g then i)","depth":10,"bounds":{"left":0.91328126,"top":0.05625,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Pull requests","depth":10,"bounds":{"left":0.92890626,"top":0.05625,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Repositories","depth":10,"bounds":{"left":0.94453126,"top":0.05625,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"You have unread notifications(g then n)","depth":10,"bounds":{"left":0.96015626,"top":0.05625,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open user navigation menu","depth":10,"bounds":{"left":0.97578126,"top":0.05625,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":10,"bounds":{"left":0.09335937,"top":0.044444446,"width":0.000390625,"height":0.00069444446},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":11,"bounds":{"left":0.09335937,"top":0.046527777,"width":0.09257813,"height":0.020833334},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":13,"bounds":{"left":0.1,"top":0.08680555,"width":0.029296875,"height":0.022916667},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":15,"bounds":{"left":0.11289062,"top":0.09236111,"width":0.01328125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (29)","depth":13,"bounds":{"left":0.13242188,"top":0.08680555,"width":0.06484375,"height":0.022916667},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests","depth":15,"bounds":{"left":0.14492187,"top":0.09236111,"width":0.034765624,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":15,"bounds":{"left":0.1828125,"top":0.099305555,"width":0.003515625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"29","depth":15,"bounds":{"left":0.18632813,"top":0.099305555,"width":0.006640625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":15,"bounds":{"left":0.19296876,"top":0.099305555,"width":0.001953125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":13,"bounds":{"left":0.20039062,"top":0.08680555,"width":0.034375,"height":0.022916667},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Agents","depth":15,"bounds":{"left":0.21328124,"top":0.09236111,"width":0.017578125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":13,"bounds":{"left":0.23789063,"top":0.08680555,"width":0.035546876,"height":0.022916667},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":15,"bounds":{"left":0.25078124,"top":0.09236111,"width":0.01875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":13,"bounds":{"left":0.2765625,"top":0.08680555,"width":0.026953125,"height":0.022916667},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":15,"bounds":{"left":0.2890625,"top":0.09236111,"width":0.0109375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security and quality (24)","depth":13,"bounds":{"left":0.30664062,"top":0.08680555,"width":0.0828125,"height":0.022916667},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security and quality","depth":15,"bounds":{"left":0.3203125,"top":0.09236111,"width":0.05,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":15,"bounds":{"left":0.375,"top":0.099305555,"width":0.003515625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"24","depth":15,"bounds":{"left":0.37851563,"top":0.099305555,"width":0.006640625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":15,"bounds":{"left":0.38515624,"top":0.099305555,"width":0.001953125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":13,"bounds":{"left":0.39257812,"top":0.08680555,"width":0.03671875,"height":0.022916667},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":15,"bounds":{"left":0.40585938,"top":0.09236111,"width":0.01953125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":13,"bounds":{"left":0.43242186,"top":0.08680555,"width":0.037890624,"height":0.022916667},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":15,"bounds":{"left":0.44570312,"top":0.09236111,"width":0.020703126,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Important update","depth":11,"bounds":{"left":0.10976563,"top":0.125,"width":0.000390625,"height":0.014583333},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Important update","depth":12,"bounds":{"left":0.10976563,"top":0.12638889,"width":0.04609375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.","depth":11,"bounds":{"left":0.10976563,"top":0.12638889,"width":0.25351563,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Review this update","depth":11,"bounds":{"left":0.36328125,"top":0.12638889,"width":0.048046876,"height":0.011805556},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Review this update","depth":12,"bounds":{"left":0.36328125,"top":0.12638889,"width":0.048046876,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and manage your preferences in your","depth":11,"bounds":{"left":0.41132814,"top":0.12638889,"width":0.096875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GitHub account settings","depth":11,"bounds":{"left":0.50820315,"top":0.12638889,"width":0.061328124,"height":0.011805556},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub account settings","depth":12,"bounds":{"left":0.50820315,"top":0.12638889,"width":0.061328124,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":11,"bounds":{"left":0.56953126,"top":0.12638889,"width":0.0015625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dismiss banner","depth":10,"bounds":{"left":0.9785156,"top":0.12083333,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"JY-18909 Add Ask Jiminny Report type in list #11894 Edit title","depth":12,"bounds":{"left":0.30664062,"top":0.16666667,"width":0.30078125,"height":0.027777778},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JY-18909 Add Ask Jiminny Report type in list","depth":13,"bounds":{"left":0.30664062,"top":0.16736111,"width":0.2421875,"height":0.02638889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":14,"bounds":{"left":0.55195314,"top":0.16736111,"width":0.0078125,"height":0.02638889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11894","depth":14,"bounds":{"left":0.55976564,"top":0.16736111,"width":0.03359375,"height":0.02638889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit title","depth":13,"bounds":{"left":0.5949219,"top":0.16944444,"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":"Awaiting approval","depth":12,"bounds":{"left":0.6816406,"top":0.17222223,"width":0.06523438,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Awaiting approval","depth":14,"bounds":{"left":0.69609374,"top":0.17777778,"width":0.045703124,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Code","depth":12,"bounds":{"left":0.7484375,"top":0.17222223,"width":0.033203125,"height":0.022222223},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":14,"bounds":{"left":0.7535156,"top":0.17777778,"width":0.013671875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":12,"bounds":{"left":0.3191406,"top":0.20555556,"width":0.0140625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"nikolay-yankov","depth":14,"bounds":{"left":0.34101564,"top":0.20277777,"width":0.039453126,"height":0.014583333},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"nikolay-yankov","depth":15,"bounds":{"left":0.34101564,"top":0.20416667,"width":0.039453126,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 35 commits into","depth":14,"bounds":{"left":0.38203126,"top":0.20416667,"width":0.08164062,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":14,"bounds":{"left":0.46523437,"top":0.20277777,"width":0.021484375,"height":0.015277778},"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":15,"bounds":{"left":0.4675781,"top":0.2048611,"width":0.016796876,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":15,"bounds":{"left":0.48828125,"top":0.20416667,"width":0.01171875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-18909-automated-reports-ask-jiminny","depth":15,"bounds":{"left":0.5015625,"top":0.20277777,"width":0.11171875,"height":0.015277778},"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-18909-automated-reports-ask-jiminny","depth":16,"bounds":{"left":0.50390625,"top":0.2048611,"width":0.10703125,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":15,"bounds":{"left":0.6148437,"top":0.20069444,"width":0.0109375,"height":0.019444445},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 2731 additions & 256 deletions","depth":13,"bounds":{"left":0.73398435,"top":0.24930556,"width":0.0234375,"height":0.099305555},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Conversation (6)","depth":15,"bounds":{"left":0.30664062,"top":0.23402777,"width":0.06757812,"height":0.027083334},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Conversation","depth":16,"bounds":{"left":0.32265624,"top":0.24166666,"width":0.033203125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":17,"bounds":{"left":0.36757812,"top":0.24166666,"width":0.003515625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6","depth":17,"bounds":{"left":0.37109375,"top":0.24166666,"width":0.003515625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":17,"bounds":{"left":0.37460938,"top":0.24166666,"width":0.001953125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Commits (35)","depth":15,"bounds":{"left":0.37421876,"top":0.23402777,"width":0.059765626,"height":0.027083334},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Commits","depth":16,"bounds":{"left":0.39023438,"top":0.24166666,"width":0.022265624,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":17,"bounds":{"left":0.42734376,"top":0.24166666,"width":0.003515625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"35","depth":17,"bounds":{"left":0.4308594,"top":0.24166666,"width":0.006640625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":17,"bounds":{"left":0.4375,"top":0.24166666,"width":0.001953125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Checks (3)","depth":15,"bounds":{"left":0.43398437,"top":0.23402777,"width":0.053125,"height":0.027083334},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks","depth":16,"bounds":{"left":0.45,"top":0.24166666,"width":0.01875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":17,"bounds":{"left":0.48046875,"top":0.24166666,"width":0.003515625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":17,"bounds":{"left":0.48398438,"top":0.24166666,"width":0.003125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":17,"bounds":{"left":0.48710936,"top":0.24166666,"width":0.001953125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Files changed (37)","depth":15,"bounds":{"left":0.48710936,"top":0.23402777,"width":0.071875,"height":0.027083334},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Files changed","depth":16,"bounds":{"left":0.503125,"top":0.24166666,"width":0.034765624,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":17,"bounds":{"left":0.5523437,"top":0.24166666,"width":0.003515625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37","depth":17,"bounds":{"left":0.5558594,"top":0.24166666,"width":0.006640625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":17,"bounds":{"left":0.5625,"top":0.24166666,"width":0.001953125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Conversation","depth":11,"bounds":{"left":0.31289062,"top":0.27291667,"width":0.000390625,"height":0.00069444446},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation","depth":12,"bounds":{"left":0.31289062,"top":0.275,"width":0.056640625,"height":0.020833334},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@nikolay-yankov","depth":11,"bounds":{"left":0.31289062,"top":0.27291667,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show options","depth":14,"bounds":{"left":0.634375,"top":0.2736111,"width":0.009375,"height":0.025694445},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"nikolay-yankov commented 2 weeks ago •","depth":13,"bounds":{"left":0.34140626,"top":0.2736111,"width":0.28359374,"height":0.025694445},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"nikolay-yankov","depth":15,"bounds":{"left":0.34140626,"top":0.28055555,"width":0.039453126,"height":0.011805556},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"nikolay-yankov","depth":16,"bounds":{"left":0.34140626,"top":0.28055555,"width":0.039453126,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"commented","depth":14,"bounds":{"left":0.38242188,"top":0.28055555,"width":0.030078124,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"2 weeks ago","depth":14,"bounds":{"left":0.4140625,"top":0.27916667,"width":0.031640626,"height":0.014583333},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2 weeks ago","depth":16,"bounds":{"left":0.4140625,"top":0.28055555,"width":0.031640626,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"•","depth":16,"bounds":{"left":0.44726562,"top":0.28055555,"width":0.00234375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"edited","depth":16,"bounds":{"left":0.45117188,"top":0.27916667,"width":0.023828125,"height":0.014583333},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"edited","depth":18,"bounds":{"left":0.45117188,"top":0.28055555,"width":0.017578125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JIRA: JY-18909","depth":15,"bounds":{"left":0.34140626,"top":0.31111112,"width":0.30234376,"height":0.015277778},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JIRA:","depth":16,"bounds":{"left":0.34140626,"top":0.31180555,"width":0.01875,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-18909","depth":16,"bounds":{"left":0.36015624,"top":0.31180555,"width":0.031640626,"height":0.014583333},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-18909","depth":17,"bounds":{"left":0.36015624,"top":0.31180555,"width":0.031640626,"height":0.014583333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Deployment notes:","depth":15,"bounds":{"left":0.34140626,"top":0.34305555,"width":0.30234376,"height":0.0125},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deployment notes:","depth":16,"bounds":{"left":0.34140626,"top":0.34375,"width":0.05,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"We need the new queue to be deployed first by Ves","depth":17,"bounds":{"left":0.34140626,"top":0.36805555,"width":0.13476562,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DO NOT merge before that","depth":17,"bounds":{"left":0.34140626,"top":0.3826389,"width":0.0703125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add or remove reactions","depth":15,"bounds":{"left":0.34140626,"top":0.40694445,"width":0.01015625,"height":0.018055556},"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"@nikolay-yankov","depth":11,"bounds":{"left":0.35078126,"top":0.4625,"width":0.0078125,"height":0.013888889},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"JY-18909","depth":13,"bounds":{"left":0.3609375,"top":0.4652778,"width":0.02265625,"height":0.010416667},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-18909","depth":14,"bounds":{"left":0.3609375,"top":0.4652778,"width":0.02265625,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Add Ask Jiminny Report type in list","depth":13,"bounds":{"left":0.38632813,"top":0.4652778,"width":0.09882812,"height":0.010416667},"help_text":"JY-18909 Add Ask Jiminny Report type in list","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add Ask Jiminny Report type in list","depth":14,"bounds":{"left":0.38632813,"top":0.4652778,"width":0.09882812,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"3 / 7 checks OK","depth":13,"bounds":{"left":0.6226562,"top":0.4625,"width":0.00625,"height":0.014583333},"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"8fb6884","depth":13,"bounds":{"left":0.6304687,"top":0.4652778,"width":0.019921875,"height":0.010416667},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8fb6884","depth":14,"bounds":{"left":0.6304687,"top":0.4652778,"width":0.019921875,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"windsurf-bot[bot]","depth":12,"bounds":{"left":0.31289062,"top":0.5034722,"width":0.015625,"height":0.027777778},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"windsurf-bot","depth":14,"bounds":{"left":0.35078126,"top":0.5104167,"width":0.034765624,"height":0.011805556},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"windsurf-bot","depth":15,"bounds":{"left":0.35078126,"top":0.5104167,"width":0.034765624,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"bot","depth":15,"bounds":{"left":0.3894531,"top":0.51180553,"width":0.0078125,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"reviewed","depth":13,"bounds":{"left":0.40117186,"top":0.5104167,"width":0.02421875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"2 weeks ago","depth":13,"bounds":{"left":0.42539063,"top":0.5104167,"width":0.031640626,"height":0.011805556},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2 weeks ago","depth":15,"bounds":{"left":0.42539063,"top":0.5104167,"width":0.031640626,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View reviewed changes","depth":13,"bounds":{"left":0.590625,"top":0.5069444,"width":0.059765626,"height":0.019444445},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"View reviewed changes","depth":15,"bounds":{"left":0.59414065,"top":0.51111114,"width":0.052734375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Show options","depth":14,"bounds":{"left":0.634375,"top":0.5416667,"width":0.009375,"height":0.025694445},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"windsurf-bot bot left a comment","depth":13,"bounds":{"left":0.34140626,"top":0.5416667,"width":0.28359374,"height":0.025694445},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"windsurf-bot","depth":15,"bounds":{"left":0.34140626,"top":0.5486111,"width":0.034765624,"height":0.011805556},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"windsurf-bot","depth":16,"bounds":{"left":0.34140626,"top":0.5486111,"width":0.034765624,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"bot","depth":16,"bounds":{"left":0.38007814,"top":0.55,"width":0.0078125,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"left a comment","depth":14,"bounds":{"left":0.3921875,"top":0.5486111,"width":0.037890624,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"💡","depth":16,"bounds":{"left":0.34140626,"top":0.58055556,"width":0.008984375,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"To request another review, post a new comment with \"/windsurf-review\".","depth":17,"bounds":{"left":0.3503906,"top":0.58055556,"width":0.18320313,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add or remove reactions","depth":15,"bounds":{"left":0.34140626,"top":0.60486114,"width":0.01015625,"height":0.018055556},"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand comment thread","depth":15,"bounds":{"left":0.35078126,"top":0.64652777,"width":0.29921874,"height":0.023611112},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8795683032450974258
|
-7983654394714461562
|
idle
|
accessibility
|
NULL
|
JY-18909 Add Ask Jiminny Report type in list by ni JY-18909 Add Ask Jiminny Report type in list by nikolay-yankov · Pull Request #11894 · jiminny/app
Pipelines - jiminny/app
Feed — jiminny — Sentry
Your Tuesday report report is ready - [EMAIL] - Jiminny Mail
JY-18909 Add Ask Jiminny Report type in list by nikolay-yankov · Pull Request #11894 · jiminny/app
JY-18909 Add Ask Jiminny Report type in list by nikolay-yankov · Pull Request #11894 · jiminny/app
Close tab
Issues - app in Jiminny SonarQube Cloud
Issues - app in Jiminny SonarQube Cloud
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
Console Home | Console Home | us-east-2
Console Home | Console Home | us-east-2
SecurityGroup | EC2 | us-east-2
SecurityGroup | EC2 | us-east-2
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
New Tab
New Tab
CloudWatch | us-east-2
CloudWatch | us-east-2
Jy 20541 stale records pr 1 by Vasil-Jiminny · Pull Request #11949 · jiminny/app
Jy 20541 stale records pr 1 by Vasil-Jiminny · Pull Request #11949 · jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
Issues(g then i)
Pull requests
Repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (29)
Pull requests
(
29
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (24)
Security and quality
(
24
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
JY-18909 Add Ask Jiminny Report type in list #11894 Edit title
JY-18909 Add Ask Jiminny Report type in list
#
11894
Edit title
Awaiting approval
Awaiting approval
Code
Code
Open
nikolay-yankov
nikolay-yankov
wants to merge 35 commits into
master
master
from
JY-18909-automated-reports-ask-jiminny
JY-18909-automated-reports-ask-jiminny
Copy head branch name to clipboard
Lines changed: 2731 additions & 256 deletions
Conversation (6)
Conversation
(
6
)
Commits (35)
Commits
(
35
)
Checks (3)
Checks
(
3
)
Files changed (37)
Files changed
(
37
)
Conversation
Conversation
@nikolay-yankov
Show options
nikolay-yankov commented 2 weeks ago •
nikolay-yankov
nikolay-yankov
commented
2 weeks ago
2 weeks ago
•
edited
edited
JIRA: JY-18909
JIRA:
JY-18909
JY-18909
Deployment notes:
Deployment notes:
We need the new queue to be deployed first by Ves
DO NOT merge before that
Add or remove reactions
@nikolay-yankov
JY-18909
JY-18909
Add Ask Jiminny Report type in list
Add Ask Jiminny Report type in list
3 / 7 checks OK
8fb6884
8fb6884
windsurf-bot[bot]
windsurf-bot
windsurf-bot
bot
reviewed
2 weeks ago
2 weeks ago
View reviewed changes
View reviewed changes
Show options
windsurf-bot bot left a comment
windsurf-bot
windsurf-bot
bot
left a comment
💡
To request another review, post a new comment with "/windsurf-review".
Add or remove reactions
Expand comment thread...
|
13743
|
|
7237
|
130
|
29
|
2026-04-13T14:55:03.282940+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-13/1776 /Users/lukas/.screenpipe/data/data/2026-04-13/1776092103282_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp100% 147-zshDOCKER• 881DEV (-zsh)О ₴2APP (-zsh)• *3-zsh• ×4-zsh• ₴5|-zsh886drwx------+91lukasstaff2912 13Apr17:09lukasstaff27011Apr18:59drwxr-xr-x5lukasstaffconfig.json16011Apr15:03data-rw-r--r--lukasstaff43819008013 Apr17:10db.sqlite-rw-r--r--lukasstaff6553612Apr12:11db.sqlite-shm-rw-r--r--lukasstaff657555213Apr17:12db.sqlite-waldrwxr-xr-x8lukasstaff2569Apr19:53pipes-rw-r--r--lukasstaff1327369Apr21:27-W-r=-r--lukasstaff9542511screenpipe.2026-04-09.0.10gApr23:14screenpipe.2026-04-11.0.10g-rw-r--r--lukasstaff7233212Apr23:55 screenpipe.2026-04-12.0.10g-rw-r--r--lukasstaff2997413 Apr17:11 screenpipe.2026-04-13.0.10glukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $cp ~/.screenpipe/db.sqlite /Volumes/screenpipe/db.sqlitecp: /Volumes/screenpipe/db.sqlite:Nosuch fileordirectorylukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $cp ~/.screenpipe/db.sqlite /Volumes/screenpipe/db.sqlitecp: /Volumes/screenpipe/db.sqlite: Operation notpermittedlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $sudo cp ~/.screenpipe/db.sqlite /Volumes/screenpipe/db.sqlitePassword:[PASSWORD] /Volumes/screenpipe/db.sqlite: Operation notpermittedlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sudo cp ~/.screenpipe/db.sqlite /Volumes/Test/screenpipe/db.sqlitePassword:[PASSWORD] a password is requiredlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cp ~/.screenpipe/db.sqlite /Volumes/Test/screenpipe/db.sqlitelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $cd datalukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe/data $ lsdatapending-transcriptionsscreenpipe.dblukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cp ~/.screenpipe/data/* /Volumes/Test/screenpipecp: /Users/lukas/.screenpipe/data/data is a directory (not copied).cp: /Users/lukas/.screenpipe/data/pending-transcriptions is a directory (not copied).lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd datalukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe/data/data $ 11total 24drwxr-xr-x7 lukasstaff224 13 Apr 15:11drwxr-xr-x5 lukasstaff16011 Apr 15:03-rw-r--r--@1 lukasstaff81969 Apr 20:43.DS_Storedrwxr-xr-x14 lukasstaff448 11 Apr 14:532026-04-09drwxr-xr-x30 lukasstaff96012 Apr 09:022026-04-11drwxr-xr-x46 lukasstaff1472 13 Apr 15:132026-04-12drwxr-xr-x156 lukasstaff4992 13Apr 17:22 2026-04-13Lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cp ~/.screenpipe/data/data/2026-04-13 /Volumes/Test/screenpipe/data/2026-04-13cp: /Users/lukas/.screenpipe/data/data/2026-04-13is a directory (not copied).lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe/data/data $ cp -r ~/.screenpipe/data/data/2026-04-12 /Volumes/Test/screenpipe/data/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe/data/data $ cp-r ~/.screenpipe/data/data/2026-04-09 /Volumes/Test/screenpipe/data/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe/data/data $ cp -r ~/.screenpipe/data/data/2026-04-11 /Volumes/Test/screenpipe/data/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe/data/data $ cp -r ~/.screenpipe/data/data/2026-04-12 /Volumes/Test/screenpipe/data/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe/data/data $ |-zshO 87Mon 13 Apr 17:55:02181* Unable to acce...€ 888...
|
NULL
|
8795482973665789296
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp100% 147-zshDOCKER• 881DEV (-zsh)О ₴2APP (-zsh)• *3-zsh• ×4-zsh• ₴5|-zsh886drwx------+91lukasstaff2912 13Apr17:09lukasstaff27011Apr18:59drwxr-xr-x5lukasstaffconfig.json16011Apr15:03data-rw-r--r--lukasstaff43819008013 Apr17:10db.sqlite-rw-r--r--lukasstaff6553612Apr12:11db.sqlite-shm-rw-r--r--lukasstaff657555213Apr17:12db.sqlite-waldrwxr-xr-x8lukasstaff2569Apr19:53pipes-rw-r--r--lukasstaff1327369Apr21:27-W-r=-r--lukasstaff9542511screenpipe.2026-04-09.0.10gApr23:14screenpipe.2026-04-11.0.10g-rw-r--r--lukasstaff7233212Apr23:55 screenpipe.2026-04-12.0.10g-rw-r--r--lukasstaff2997413 Apr17:11 screenpipe.2026-04-13.0.10glukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $cp ~/.screenpipe/db.sqlite /Volumes/screenpipe/db.sqlitecp: /Volumes/screenpipe/db.sqlite:Nosuch fileordirectorylukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $cp ~/.screenpipe/db.sqlite /Volumes/screenpipe/db.sqlitecp: /Volumes/screenpipe/db.sqlite: Operation notpermittedlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $sudo cp ~/.screenpipe/db.sqlite /Volumes/screenpipe/db.sqlitePassword:[PASSWORD] /Volumes/screenpipe/db.sqlite: Operation notpermittedlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sudo cp ~/.screenpipe/db.sqlite /Volumes/Test/screenpipe/db.sqlitePassword:[PASSWORD] a password is requiredlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cp ~/.screenpipe/db.sqlite /Volumes/Test/screenpipe/db.sqlitelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $cd datalukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe/data $ lsdatapending-transcriptionsscreenpipe.dblukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cp ~/.screenpipe/data/* /Volumes/Test/screenpipecp: /Users/lukas/.screenpipe/data/data is a directory (not copied).cp: /Users/lukas/.screenpipe/data/pending-transcriptions is a directory (not copied).lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd datalukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe/data/data $ 11total 24drwxr-xr-x7 lukasstaff224 13 Apr 15:11drwxr-xr-x5 lukasstaff16011 Apr 15:03-rw-r--r--@1 lukasstaff81969 Apr 20:43.DS_Storedrwxr-xr-x14 lukasstaff448 11 Apr 14:532026-04-09drwxr-xr-x30 lukasstaff96012 Apr 09:022026-04-11drwxr-xr-x46 lukasstaff1472 13 Apr 15:132026-04-12drwxr-xr-x156 lukasstaff4992 13Apr 17:22 2026-04-13Lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cp ~/.screenpipe/data/data/2026-04-13 /Volumes/Test/screenpipe/data/2026-04-13cp: /Users/lukas/.screenpipe/data/data/2026-04-13is a directory (not copied).lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe/data/data $ cp -r ~/.screenpipe/data/data/2026-04-12 /Volumes/Test/screenpipe/data/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe/data/data $ cp-r ~/.screenpipe/data/data/2026-04-09 /Volumes/Test/screenpipe/data/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe/data/data $ cp -r ~/.screenpipe/data/data/2026-04-11 /Volumes/Test/screenpipe/data/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe/data/data $ cp -r ~/.screenpipe/data/data/2026-04-12 /Volumes/Test/screenpipe/data/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe/data/data $ |-zshO 87Mon 13 Apr 17:55:02181* Unable to acce...€ 888...
|
7236
|