|
51617
|
1812
|
34
|
2026-05-18T08:49:10.899152+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094150899_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
HomeActivityMoreSlackcalVIewMistonWindowhelp@ Desc HomeActivityMoreSlackcalVIewMistonWindowhelp@ Describe what you are looking forJiminny …..v# general#jiminny-bg# plattorm-tickets# product_launches# random# releases# sofa-office# support# thank-yous# the people of iimi.ó Direct messagesNikolav YankovAa Stovan Tomov• Vasil Vasilev• Galva DimitrovaAneliya AngelovaA Stefka Stovanovaa Todor Stamatov "Mario GeorgievNikolav Ivanovdo James Graham3 Stovan Tanevo Steliyan GeorgievPetko KashinskiLukas Kovalik y...::: Aonsi Jira CloudNikolay Yankov• Messagest Add canvasMoreKAк ce kaзвaTodayше дойла пои твояlukas Kovalk 138AMпоати я като owner roleNikolay Yankov 11:39 AMлobреLukas Kovalik 11:40 AM[URL_WITH_CREDENTIALS] CanAccessAiRenortsTest nhn tests/Unit/Policies© CreateMockAskJiminnyReportResultCommand.php app/Console/Commands/RF favicon.ico nublidE ids.txt appTa raw_sqLquery.sql app(C) SimulateWehhooksCommand.nhn ann/Console/Commands/Crm/HubsnotlMI WERHOOK SII TEPING IMDI CMENTATION md anr© CreateTeamRequest.php >© EditTeamRequest.phpal.vueUserinvitationDTO.onguest extends FormRequest0* arrav= implode( separator:",', FeatureEnum::names):equired', 'string', 'max:150'J,=> L'required',emart"l= L'required',"n'recorden recorden and voice anal vsti]l→> ['required','uuid:accounts'],['required','string', 'max:150']quired', 'string', 'max:150'],['array'],=> ['in:' . SexistingFeatures],'sometimes', 'nullable','max:150'],['required', 'uuid:tiers']=> ['sometimes', 'nullable', 'uuid:partners']->1nput key: 'teatures')*ureEnum::DIALER->name, $features)) {a address rulesis->qetBillingAddressRules@:→ E Side-by-side viewer yDo not ianorey8bb2 config/logging.php'driver' =>"ennonlod!'level' => env('LOG _LEVEL', 'info'),'path' => storage_path('logs/Laravel.log').=custom.log4 SF [jiminny@localhost]A console [STAGING]A HS_local [jiminny@localhost]* console [PRoDJfii users (PROD]© Kernel.php X A console [EU]class Kernel extends ConsoleKernelA6.17AVRestoretrackscommand:•cllass.HubspotWebhookServiceCommand::class,Tocessneryeuobgectscumliand..class.HubspotJournalPollingCommand::class,SetupJournalDealWebhookSubscriptionsCommand::class,LiscsournaLweonookoudscripczonsconmand..ctdss,kenovebnoscrarctcrpantscommand..classAUcodececcALAccIVIty ypecommand..class.commanos crmLocacciviclescommand..classcommanos crm nacchupporcunicyacclviclescomnand..classPurgevelecedupporcunlclestommand:: classCLeanbupLicarerzelavaracommand:: class,kecryProspeccsummarycommand:: classProcesshubspocubnectssyncbatches:.classsyncupporcun1t1esn1ss1ngr1elavatacommand::classRestorevealassocrarzonscommand::class.orivate Schedule Sschedule:orivate strind Soutout:375 O1protected function schedule(Schedule $schedule): voidt...}1 usageprotected function scheduleEveryMinute: voidt...}"Preparation tor kerl... In sh 11m100% L2• Mon 18 May 11:49:10+0 ..+5-1Implement Trial Owner• UserinvitationDTO.phpThouahts• EditTeamRequest.phpThought for 1s3/5 tasks donebackena changes complered1. CreateTeamRequest.php - Added owner role validation and getter method2. UserinvitationDTO.php - Modified forownero to use role from request + ADMINI3. EditTeamRequest.php - Added owner role prohibition for edit modeCreateTeam.oho does NOT need changes - it only creates the team/CRM contiauration/teatures. The ownerl invitation happens afterin eamcontro ler:astoree vallsen nvtatRemainina trontend chandes.• Add owner role field to EditTeamModal vue (below Owner email)• Move Opportunity Sync Period field to 3rd row, 1st column•Only show owner role field when creatina (not editina))nl «Ask anvthina (*4L)+ &CodeSWE-1.61ditterenceCurrent vercion'driver' => 'errorlog','level' => env('LOG_LEVEL', 'info'),'path' => storage_path( 'logs/Laravel.log')'custom channel' => ['driver' => 'single','path' => storage_path('loqs/custom.10g')'level' => env('LOG LEVEL', 'info').Po 4 spaces...
|
NULL
|
8604167543726702612
|
NULL
|
visual_change
|
ocr
|
NULL
|
HomeActivityMoreSlackcalVIewMistonWindowhelp@ Desc HomeActivityMoreSlackcalVIewMistonWindowhelp@ Describe what you are looking forJiminny …..v# general#jiminny-bg# plattorm-tickets# product_launches# random# releases# sofa-office# support# thank-yous# the people of iimi.ó Direct messagesNikolav YankovAa Stovan Tomov• Vasil Vasilev• Galva DimitrovaAneliya AngelovaA Stefka Stovanovaa Todor Stamatov "Mario GeorgievNikolav Ivanovdo James Graham3 Stovan Tanevo Steliyan GeorgievPetko KashinskiLukas Kovalik y...::: Aonsi Jira CloudNikolay Yankov• Messagest Add canvasMoreKAк ce kaзвaTodayше дойла пои твояlukas Kovalk 138AMпоати я като owner roleNikolay Yankov 11:39 AMлobреLukas Kovalik 11:40 AM[URL_WITH_CREDENTIALS] CanAccessAiRenortsTest nhn tests/Unit/Policies© CreateMockAskJiminnyReportResultCommand.php app/Console/Commands/RF favicon.ico nublidE ids.txt appTa raw_sqLquery.sql app(C) SimulateWehhooksCommand.nhn ann/Console/Commands/Crm/HubsnotlMI WERHOOK SII TEPING IMDI CMENTATION md anr© CreateTeamRequest.php >© EditTeamRequest.phpal.vueUserinvitationDTO.onguest extends FormRequest0* arrav= implode( separator:",', FeatureEnum::names):equired', 'string', 'max:150'J,=> L'required',emart"l= L'required',"n'recorden recorden and voice anal vsti]l→> ['required','uuid:accounts'],['required','string', 'max:150']quired', 'string', 'max:150'],['array'],=> ['in:' . SexistingFeatures],'sometimes', 'nullable','max:150'],['required', 'uuid:tiers']=> ['sometimes', 'nullable', 'uuid:partners']->1nput key: 'teatures')*ureEnum::DIALER->name, $features)) {a address rulesis->qetBillingAddressRules@:→ E Side-by-side viewer yDo not ianorey8bb2 config/logging.php'driver' =>"ennonlod!'level' => env('LOG _LEVEL', 'info'),'path' => storage_path('logs/Laravel.log').=custom.log4 SF [jiminny@localhost]A console [STAGING]A HS_local [jiminny@localhost]* console [PRoDJfii users (PROD]© Kernel.php X A console [EU]class Kernel extends ConsoleKernelA6.17AVRestoretrackscommand:•cllass.HubspotWebhookServiceCommand::class,Tocessneryeuobgectscumliand..class.HubspotJournalPollingCommand::class,SetupJournalDealWebhookSubscriptionsCommand::class,LiscsournaLweonookoudscripczonsconmand..ctdss,kenovebnoscrarctcrpantscommand..classAUcodececcALAccIVIty ypecommand..class.commanos crmLocacciviclescommand..classcommanos crm nacchupporcunicyacclviclescomnand..classPurgevelecedupporcunlclestommand:: classCLeanbupLicarerzelavaracommand:: class,kecryProspeccsummarycommand:: classProcesshubspocubnectssyncbatches:.classsyncupporcun1t1esn1ss1ngr1elavatacommand::classRestorevealassocrarzonscommand::class.orivate Schedule Sschedule:orivate strind Soutout:375 O1protected function schedule(Schedule $schedule): voidt...}1 usageprotected function scheduleEveryMinute: voidt...}"Preparation tor kerl... In sh 11m100% L2• Mon 18 May 11:49:10+0 ..+5-1Implement Trial Owner• UserinvitationDTO.phpThouahts• EditTeamRequest.phpThought for 1s3/5 tasks donebackena changes complered1. CreateTeamRequest.php - Added owner role validation and getter method2. UserinvitationDTO.php - Modified forownero to use role from request + ADMINI3. EditTeamRequest.php - Added owner role prohibition for edit modeCreateTeam.oho does NOT need changes - it only creates the team/CRM contiauration/teatures. The ownerl invitation happens afterin eamcontro ler:astoree vallsen nvtatRemainina trontend chandes.• Add owner role field to EditTeamModal vue (below Owner email)• Move Opportunity Sync Period field to 3rd row, 1st column•Only show owner role field when creatina (not editina))nl «Ask anvthina (*4L)+ &CodeSWE-1.61ditterenceCurrent vercion'driver' => 'errorlog','level' => env('LOG_LEVEL', 'info'),'path' => storage_path( 'logs/Laravel.log')'custom channel' => ['driver' => 'single','path' => storage_path('loqs/custom.10g')'level' => env('LOG LEVEL', 'info').Po 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51616
|
1811
|
29
|
2026-05-18T08:49:10.941505+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094150941_m1.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowH iTerm2ShellEditViewSessionScriptsProfilesWindowHelp₴81+++g Preparation for Refi... in 3h 11 mAPP (-zsh)100% <78• Mon 18 May 11:49:10screenpipe*T81O ₴4DOCKERPIPEDRIVE_V2_MIGRATION_TICKETS.md52DEV (docker)++++++++++₴2APP (-zsh)1 file changed, 52 insertions(+)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (pipedrive-sdk-poc) $co master.env.localconfig/logging.phpSwitched to branch'master'Your branch is behind 'origin/master' by 31 commits, and can be fast-forwarded.Cuse"git pull"to update your local branch)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pullUpdating 31c62924a5..cb4ebf0c36Fast-forwardapp/Component/ES/Processor/Traits/SelectEntityListTrait.phpapp/Services/Calendar/CalendarActivityService.phpapp/Services/Calendar/Command/MapActivityData.phpdocs/mcp/explorer/explorer.htmldocs/mcp/explorer/explorer.template.htmldocs/mcp/tools-list.jsondocs/mcp/tools.mdtests/Unit/Component/ES/AsyncUpdateElasticSearchTest.phptests/Unit/Component/ES/Listeners/UpdateMultipleTargetsListenerTest.php204611061041023731171610++++++++++++++++++++tests/Unit/Component/ES/Listeners/UpdateSingleTargetListenerTest.phptests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.phptests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.phptests/Unit/Component/ES/UpdateProcessManagerTest.phptests/Unit/Services/Calendar/CalendarActivityServiceTest.phptests/Unit/Services/Calendar/Command/MapActivityDataTest.php91521507815 files changed, 832 insertions(+), 322 deletions(-)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co -b JY-20613-allow-owner-role-on-team-setupSwitched to a new branch 'JY-20613-allow-owner-role-on-team-setup'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ csfixdocker exec-it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diffPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminskiand contributors.PHP runtime: 8.3.30Running analysis on 7 cores with 10 files per process.Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!Loadedconfig default from".php-cs-fixer.dist.php".5682/5682 [8100%APPFixed 0 of 5682 files in 56.978 seconds, 67.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any containeror image + docker debug docker_lamp_1Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ ||...
|
NULL
|
2087435118024091750
|
NULL
|
visual_change
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowH iTerm2ShellEditViewSessionScriptsProfilesWindowHelp₴81+++g Preparation for Refi... in 3h 11 mAPP (-zsh)100% <78• Mon 18 May 11:49:10screenpipe*T81O ₴4DOCKERPIPEDRIVE_V2_MIGRATION_TICKETS.md52DEV (docker)++++++++++₴2APP (-zsh)1 file changed, 52 insertions(+)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (pipedrive-sdk-poc) $co master.env.localconfig/logging.phpSwitched to branch'master'Your branch is behind 'origin/master' by 31 commits, and can be fast-forwarded.Cuse"git pull"to update your local branch)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pullUpdating 31c62924a5..cb4ebf0c36Fast-forwardapp/Component/ES/Processor/Traits/SelectEntityListTrait.phpapp/Services/Calendar/CalendarActivityService.phpapp/Services/Calendar/Command/MapActivityData.phpdocs/mcp/explorer/explorer.htmldocs/mcp/explorer/explorer.template.htmldocs/mcp/tools-list.jsondocs/mcp/tools.mdtests/Unit/Component/ES/AsyncUpdateElasticSearchTest.phptests/Unit/Component/ES/Listeners/UpdateMultipleTargetsListenerTest.php204611061041023731171610++++++++++++++++++++tests/Unit/Component/ES/Listeners/UpdateSingleTargetListenerTest.phptests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.phptests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.phptests/Unit/Component/ES/UpdateProcessManagerTest.phptests/Unit/Services/Calendar/CalendarActivityServiceTest.phptests/Unit/Services/Calendar/Command/MapActivityDataTest.php91521507815 files changed, 832 insertions(+), 322 deletions(-)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co -b JY-20613-allow-owner-role-on-team-setupSwitched to a new branch 'JY-20613-allow-owner-role-on-team-setup'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ csfixdocker exec-it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diffPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminskiand contributors.PHP runtime: 8.3.30Running analysis on 7 cores with 10 files per process.Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!Loadedconfig default from".php-cs-fixer.dist.php".5682/5682 [8100%APPFixed 0 of 5682 files in 56.978 seconds, 67.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any containeror image + docker debug docker_lamp_1Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ ||...
|
51615
|
NULL
|
NULL
|
NULL
|
|
51618
|
NULL
|
0
|
2026-05-18T08:49:41.480200+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094181480_m1.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowH iTerm2ShellEditViewSessionScriptsProfilesWindowHelp₴81+++g Preparation for Refi... in 3h 11 mAPP (-zsh)100% <78• Mon 18 May 11:49:41screenpipe*T81O ₴4DOCKERPIPEDRIVE_V2_MIGRATION_TICKETS.md52DEV (docker)++++++++++₴2APP (-zsh)1 file changed, 52 insertions(+)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (pipedrive-sdk-poc) $co master.env.localconfig/logging.phpSwitched to branch'master'Your branch is behind 'origin/master' by 31 commits, and can be fast-forwarded.Cuse"git pull"to update your local branch)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pullUpdating 31c62924a5..cb4ebf0c36Fast-forwardapp/Component/ES/Processor/Traits/SelectEntityListTrait.phpapp/Services/Calendar/CalendarActivityService.phpapp/Services/Calendar/Command/MapActivityData.phpdocs/mcp/explorer/explorer.htmldocs/mcp/explorer/explorer.template.htmldocs/mcp/tools-list.jsondocs/mcp/tools.mdtests/Unit/Component/ES/AsyncUpdateElasticSearchTest.phptests/Unit/Component/ES/Listeners/UpdateMultipleTargetsListenerTest.php204611061041023731171610++++++++++++++++++++tests/Unit/Component/ES/Listeners/UpdateSingleTargetListenerTest.phptests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.phptests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.phptests/Unit/Component/ES/UpdateProcessManagerTest.phptests/Unit/Services/Calendar/CalendarActivityServiceTest.phptests/Unit/Services/Calendar/Command/MapActivityDataTest.php91521507815 files changed, 832 insertions(+), 322 deletions(-)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co -b JY-20613-allow-owner-role-on-team-setupSwitched to a new branch 'JY-20613-allow-owner-role-on-team-setup'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ csfixdocker exec-it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diffPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminskiand contributors.PHP runtime: 8.3.30Running analysis on 7 cores with 10 files per process.Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!Loadedconfig default from".php-cs-fixer.dist.php".5682/5682 [8100%APPFixed 0 of 5682 files in 56.978 seconds, 67.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any containeror image + docker debug docker_lamp_1Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ ||...
|
NULL
|
-4575624734366179398
|
NULL
|
idle
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowH iTerm2ShellEditViewSessionScriptsProfilesWindowHelp₴81+++g Preparation for Refi... in 3h 11 mAPP (-zsh)100% <78• Mon 18 May 11:49:41screenpipe*T81O ₴4DOCKERPIPEDRIVE_V2_MIGRATION_TICKETS.md52DEV (docker)++++++++++₴2APP (-zsh)1 file changed, 52 insertions(+)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (pipedrive-sdk-poc) $co master.env.localconfig/logging.phpSwitched to branch'master'Your branch is behind 'origin/master' by 31 commits, and can be fast-forwarded.Cuse"git pull"to update your local branch)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pullUpdating 31c62924a5..cb4ebf0c36Fast-forwardapp/Component/ES/Processor/Traits/SelectEntityListTrait.phpapp/Services/Calendar/CalendarActivityService.phpapp/Services/Calendar/Command/MapActivityData.phpdocs/mcp/explorer/explorer.htmldocs/mcp/explorer/explorer.template.htmldocs/mcp/tools-list.jsondocs/mcp/tools.mdtests/Unit/Component/ES/AsyncUpdateElasticSearchTest.phptests/Unit/Component/ES/Listeners/UpdateMultipleTargetsListenerTest.php204611061041023731171610++++++++++++++++++++tests/Unit/Component/ES/Listeners/UpdateSingleTargetListenerTest.phptests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.phptests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.phptests/Unit/Component/ES/UpdateProcessManagerTest.phptests/Unit/Services/Calendar/CalendarActivityServiceTest.phptests/Unit/Services/Calendar/Command/MapActivityDataTest.php91521507815 files changed, 832 insertions(+), 322 deletions(-)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co -b JY-20613-allow-owner-role-on-team-setupSwitched to a new branch 'JY-20613-allow-owner-role-on-team-setup'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ csfixdocker exec-it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diffPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminskiand contributors.PHP runtime: 8.3.30Running analysis on 7 cores with 10 files per process.Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!Loadedconfig default from".php-cs-fixer.dist.php".5682/5682 [8100%APPFixed 0 of 5682 files in 56.978 seconds, 67.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any containeror image + docker debug docker_lamp_1Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ ||...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51619
|
NULL
|
0
|
2026-05-18T08:49:42.085972+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094182085_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
HomeActivityMoreSlackcalVIewMistonWindowhelp@ Desc HomeActivityMoreSlackcalVIewMistonWindowhelp@ Describe what you are looking forJiminny …..v# general#jiminny-bg# plattorm-tickets# product_launches# random# releases# sofa-office# support# thank-yous# the people of iimi.ó Direct messagesNikolav YankovAa Stovan Tomov• Vasil Vasilev• Galva DimitrovaAneliya AngelovaA Stefka Stovanovaa Todor Stamatov "Mario GeorgievNikolav Ivanovdo James Graham3 Stovan Tanevo Steliyan GeorgievPetko KashinskiLukas Kovalik y...::: Aonsi Jira CloudNikolay Yankov• Messagest Add canvasMoreKAк ce kaзвaTodayше дойла пои твояlukas Kovalk 138AMпоати я като owner roleNikolay Yankov 11:39 AMлobреLukas Kovalik 11:40 AM[URL_WITH_CREDENTIALS] CanAccessAiRenortsTest nhn tests/Unit/Policies© CreateMockAskJiminnyReportResultCommand.php app/Console/Commands/RF favicon.ico nublidE ids.txt appTa raw_sqLquery.sql app(C) SimulateWehhooksCommand.nhn ann/Console/Commands/Crm/HubsnotlMI WERHOOK SII TEPING IMDI CMENTATION md anr© CreateTeamRequest.php >© EditTeamRequest.phpal.vueUserinvitationDTo.onguest extends FormRequest0* arrav= implode( separator:",', FeatureEnum::names):equired', 'string', 'max:150'J,=> L'required',emart"l= L'required',"n'recorden recorden and voice anal vsti]l→> ['required','uuid:accounts'],['required','string', 'max:150']quired', 'string', 'max:150'],['array'],=> ['in:' . SexistingFeatures],'sometimes', 'nullable','max:150'],['required', 'uuid:tiers']=> ['sometimes', 'nullable', 'uuid:partners']->1nput key: 'teatures')*ureEnum::DIALER->name, $features)) {a address rulesis->qetBillingAddressRules@:→ E Side-by-side viewerDo not ianorey8bb2 config/logging.php'driver' =>"ennonlod!'level' => env('LOG _LEVEL', 'info'),'path' => storage_path('logs/Laravel.log').=custom.log4 SF [jiminny@localhost]A console [STAGING]A HS_local [jiminny@localhost]* console [PRoDJfii users (PROD]© Kernel.php X A console [EU]class kernel excenas consolekernelA6.17AVRestoreTrackscommand:class.HubspotWebhookServiceCommand::class,Tocessneryeuobgectscumliand..class.HubspotJournalPollingCommand::class,SetupJournalDealWebhookSubscriptionsCommand::class,LiscsournaLweonookoudscripczonsconmand..ctdss,kenovebnoscrarctcrpantscommand..classAUcodececcALAccIVIty ypecommand..class.commanos crmLocacciviclescommand..classcommanos crm nacchupporcunicyacclviclescomnand..classPurgevelecedupporcunlclestommand:: classCLeanbupLicarerzelavaracommand:: class,kecryProspeccsummarycommand:: classProcesshubspocubnectssyncbatches:.classsyncupporcun1t1esn1ss1ngr1elavatacommand::classRestorevealassocrarzonscommand::class.orivate Schedule Sschedule:orivate strind Soutout:375 O1protected function schedule(Schedule $schedule): voidt...=1 usageprotected function scheduleEveryMinute: voidt...}"Preparation tor kerl... In sh 11m100% L2• Mon 18 May 11:49:41+0 ..+5-1Implement Trial Owner• UserinvitationDTO.phpThouahts• EditTeamRequest.phpThought for 1s3/5 tasks donebackena changes complered1. CreateTeamRequest.php - Added owner role validation and getter method2. UserinvitationDTO.php - Modified forownero to use role from request + ADMINI3. EditTeamRequest.php - Added owner role prohibition for edit modeCreateTeam.oho does NOT need changes - it only creates the team/CRM contiauration/teatures. The ownerl invitation happens afterin eamcontro ler:astoree vallsen nvtatRemainina trontend chandes.• Add owner role field to EditTeamModal vue (below Owner email)• Move Opportunity Sync Period field to 3rd row, 1st column•Only show owner role field when creatina (not editina))nl «Ask anvthina (*4L)+ &CodeSWE-1.61ditterenceCurrent vercion'driver' => 'errorlog','level' => env('LOG_LEVEL', 'info'),'path' => storage_path('logs/Laravel.log')'custom channel' => ['driver' => 'single','path' => storage_path('loqs/custom.10g')'level' => env('LOG LEVEL', 'info').Po 4 spaces...
|
NULL
|
-2524156828179266679
|
NULL
|
idle
|
ocr
|
NULL
|
HomeActivityMoreSlackcalVIewMistonWindowhelp@ Desc HomeActivityMoreSlackcalVIewMistonWindowhelp@ Describe what you are looking forJiminny …..v# general#jiminny-bg# plattorm-tickets# product_launches# random# releases# sofa-office# support# thank-yous# the people of iimi.ó Direct messagesNikolav YankovAa Stovan Tomov• Vasil Vasilev• Galva DimitrovaAneliya AngelovaA Stefka Stovanovaa Todor Stamatov "Mario GeorgievNikolav Ivanovdo James Graham3 Stovan Tanevo Steliyan GeorgievPetko KashinskiLukas Kovalik y...::: Aonsi Jira CloudNikolay Yankov• Messagest Add canvasMoreKAк ce kaзвaTodayше дойла пои твояlukas Kovalk 138AMпоати я като owner roleNikolay Yankov 11:39 AMлobреLukas Kovalik 11:40 AM[URL_WITH_CREDENTIALS] CanAccessAiRenortsTest nhn tests/Unit/Policies© CreateMockAskJiminnyReportResultCommand.php app/Console/Commands/RF favicon.ico nublidE ids.txt appTa raw_sqLquery.sql app(C) SimulateWehhooksCommand.nhn ann/Console/Commands/Crm/HubsnotlMI WERHOOK SII TEPING IMDI CMENTATION md anr© CreateTeamRequest.php >© EditTeamRequest.phpal.vueUserinvitationDTo.onguest extends FormRequest0* arrav= implode( separator:",', FeatureEnum::names):equired', 'string', 'max:150'J,=> L'required',emart"l= L'required',"n'recorden recorden and voice anal vsti]l→> ['required','uuid:accounts'],['required','string', 'max:150']quired', 'string', 'max:150'],['array'],=> ['in:' . SexistingFeatures],'sometimes', 'nullable','max:150'],['required', 'uuid:tiers']=> ['sometimes', 'nullable', 'uuid:partners']->1nput key: 'teatures')*ureEnum::DIALER->name, $features)) {a address rulesis->qetBillingAddressRules@:→ E Side-by-side viewerDo not ianorey8bb2 config/logging.php'driver' =>"ennonlod!'level' => env('LOG _LEVEL', 'info'),'path' => storage_path('logs/Laravel.log').=custom.log4 SF [jiminny@localhost]A console [STAGING]A HS_local [jiminny@localhost]* console [PRoDJfii users (PROD]© Kernel.php X A console [EU]class kernel excenas consolekernelA6.17AVRestoreTrackscommand:class.HubspotWebhookServiceCommand::class,Tocessneryeuobgectscumliand..class.HubspotJournalPollingCommand::class,SetupJournalDealWebhookSubscriptionsCommand::class,LiscsournaLweonookoudscripczonsconmand..ctdss,kenovebnoscrarctcrpantscommand..classAUcodececcALAccIVIty ypecommand..class.commanos crmLocacciviclescommand..classcommanos crm nacchupporcunicyacclviclescomnand..classPurgevelecedupporcunlclestommand:: classCLeanbupLicarerzelavaracommand:: class,kecryProspeccsummarycommand:: classProcesshubspocubnectssyncbatches:.classsyncupporcun1t1esn1ss1ngr1elavatacommand::classRestorevealassocrarzonscommand::class.orivate Schedule Sschedule:orivate strind Soutout:375 O1protected function schedule(Schedule $schedule): voidt...=1 usageprotected function scheduleEveryMinute: voidt...}"Preparation tor kerl... In sh 11m100% L2• Mon 18 May 11:49:41+0 ..+5-1Implement Trial Owner• UserinvitationDTO.phpThouahts• EditTeamRequest.phpThought for 1s3/5 tasks donebackena changes complered1. CreateTeamRequest.php - Added owner role validation and getter method2. UserinvitationDTO.php - Modified forownero to use role from request + ADMINI3. EditTeamRequest.php - Added owner role prohibition for edit modeCreateTeam.oho does NOT need changes - it only creates the team/CRM contiauration/teatures. The ownerl invitation happens afterin eamcontro ler:astoree vallsen nvtatRemainina trontend chandes.• Add owner role field to EditTeamModal vue (below Owner email)• Move Opportunity Sync Period field to 3rd row, 1st column•Only show owner role field when creatina (not editina))nl «Ask anvthina (*4L)+ &CodeSWE-1.61ditterenceCurrent vercion'driver' => 'errorlog','level' => env('LOG_LEVEL', 'info'),'path' => storage_path('logs/Laravel.log')'custom channel' => ['driver' => 'single','path' => storage_path('loqs/custom.10g')'level' => env('LOG LEVEL', 'info').Po 4 spaces...
|
51617
|
NULL
|
NULL
|
NULL
|
|
51620
|
1813
|
0
|
2026-05-18T08:50:12.064467+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094212064_m1.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowH iTerm2ShellEditViewSessionScriptsProfilesWindowHelp₴81+++Preparation for Refi... in 3h 10 mAPP (-zsh)100% <78• Mon 18 May 11:50:11screenpipe*181O ₴4DOCKERPIPEDRIVE_V2_MIGRATION_TICKETS.md52DEV (docker)++++++++++₴2APP (-zsh)1 file changed, 52 insertions(+)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (pipedrive-sdk-poc) $co master.env.localconfig/logging.phpSwitched to branch'master'Your branch is behind 'origin/master' by 31 commits, and can be fast-forwarded.Cuse"git pull"to update your local branch)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pullUpdating 31c62924a5..cb4ebf0c36Fast-forwardapp/Component/ES/Processor/Traits/SelectEntityListTrait.phpapp/Services/Calendar/CalendarActivityService.phpapp/Services/Calendar/Command/MapActivityData.phpdocs/mcp/explorer/explorer.htmldocs/mcp/explorer/explorer.template.htmldocs/mcp/tools-list.jsondocs/mcp/tools.mdtests/Unit/Component/ES/AsyncUpdateElasticSearchTest.phptests/Unit/Component/ES/Listeners/UpdateMultipleTargetsListenerTest.php204611061041023731171610++++++++++++++++++++tests/Unit/Component/ES/Listeners/UpdateSingleTargetListenerTest.phptests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.phptests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.phptests/Unit/Component/ES/UpdateProcessManagerTest.phptests/Unit/Services/Calendar/CalendarActivityServiceTest.phptests/Unit/Services/Calendar/Command/MapActivityDataTest.php91521507815 files changed, 832 insertions(+), 322 deletions(-)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co -b JY-20613-allow-owner-role-on-team-setupSwitched to a new branch 'JY-20613-allow-owner-role-on-team-setup'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ csfixdocker exec-it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diffPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminskiand contributors.PHP runtime: 8.3.30Running analysis on 7 cores with 10 files per process.Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!Loadedconfig default from".php-cs-fixer.dist.php".5682/5682 [8100%APPFixed 0 of 5682 files in 56.978 seconds, 67.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any containeror image + docker debug docker_lamp_1Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ ||...
|
NULL
|
1442883046424213575
|
NULL
|
idle
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowH iTerm2ShellEditViewSessionScriptsProfilesWindowHelp₴81+++Preparation for Refi... in 3h 10 mAPP (-zsh)100% <78• Mon 18 May 11:50:11screenpipe*181O ₴4DOCKERPIPEDRIVE_V2_MIGRATION_TICKETS.md52DEV (docker)++++++++++₴2APP (-zsh)1 file changed, 52 insertions(+)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (pipedrive-sdk-poc) $co master.env.localconfig/logging.phpSwitched to branch'master'Your branch is behind 'origin/master' by 31 commits, and can be fast-forwarded.Cuse"git pull"to update your local branch)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pullUpdating 31c62924a5..cb4ebf0c36Fast-forwardapp/Component/ES/Processor/Traits/SelectEntityListTrait.phpapp/Services/Calendar/CalendarActivityService.phpapp/Services/Calendar/Command/MapActivityData.phpdocs/mcp/explorer/explorer.htmldocs/mcp/explorer/explorer.template.htmldocs/mcp/tools-list.jsondocs/mcp/tools.mdtests/Unit/Component/ES/AsyncUpdateElasticSearchTest.phptests/Unit/Component/ES/Listeners/UpdateMultipleTargetsListenerTest.php204611061041023731171610++++++++++++++++++++tests/Unit/Component/ES/Listeners/UpdateSingleTargetListenerTest.phptests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.phptests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.phptests/Unit/Component/ES/UpdateProcessManagerTest.phptests/Unit/Services/Calendar/CalendarActivityServiceTest.phptests/Unit/Services/Calendar/Command/MapActivityDataTest.php91521507815 files changed, 832 insertions(+), 322 deletions(-)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co -b JY-20613-allow-owner-role-on-team-setupSwitched to a new branch 'JY-20613-allow-owner-role-on-team-setup'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ csfixdocker exec-it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diffPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminskiand contributors.PHP runtime: 8.3.30Running analysis on 7 cores with 10 files per process.Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!Loadedconfig default from".php-cs-fixer.dist.php".5682/5682 [8100%APPFixed 0 of 5682 files in 56.978 seconds, 67.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any containeror image + docker debug docker_lamp_1Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ ||...
|
51618
|
NULL
|
NULL
|
NULL
|
|
51621
|
1814
|
0
|
2026-05-18T08:50:12.787800+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094212787_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
HomeActivityMoreSlackcalVIewMistonWindowhelp@ Desc HomeActivityMoreSlackcalVIewMistonWindowhelp@ Describe what you are looking forJiminny …..v# general#jiminny-bg# plattorm-tickets# product_launches# random# releases# sofa-office# support# thank-yous# the people of iimi.ó Direct messagesNikolav YankovAa Stovan Tomov• Vasil Vasilev• Galva DimitrovaAneliya AngelovaA Stefka Stovanovaa Todor Stamatov "Mario GeorgievNikolav Ivanovdo James Graham3 Stovan Tanevo Steliyan GeorgievPetko KashinskiLukas Kovalik y...::: Aonsi Jira CloudNikolay Yankov• Messagest Add canvasMoreKAк ce kaзвaTodayше дойла пои твояlukas Kovalk 138AMпоати я като owner roleNikolay Yankov 11:39 AMлobреLukas Kovalik 11:40 AM[URL_WITH_CREDENTIALS] CanAccessAiRenortsTest nhn tests/Unit/Policies© CreateMockAskJiminnyReportResultCommand.php app/Console/Commands/RF favicon.ico nublidE ids.txt appTa raw_sqLquery.sql app(C) SimulateWehhooksCommand.nhn ann/Console/Commands/Crm/HubsnotlMI WERHOOK SII TEPING IMDI CMENTATION md anr© CreateTeamRequest.php >© EditTeamRequest.phpal.vueUserinvitationDTo.onguest extends FormRequest0* arrav= implode( separator:",', FeatureEnum::names):equired', 'string', 'max:150'J,=> L'required',emart"l= L'required',"n'recorden recorden and voice anal vsti]l→> ['required','uuid:accounts'],['required','string', 'max:150']quired', 'string', 'max:150'],['array'],=> ['in:' . SexistingFeatures],'sometimes', 'nullable','max:150'],['required', 'uuid:tiers']=> ['sometimes', 'nullable', 'uuid:partners']->1nput key: 'teatures')*ureEnum::DIALER->name, $features)) {a address rulesis->qetBillingAddressRules@:→ E Side-by-side viewerDo not ianorey8bb2 config/logging.php'driver' =>"ennonlod!'level' => env('LOG _LEVEL', 'info'),'path' => storage_path('logs/Laravel.log').=custom.log4 SF [jiminny@localhost]A console [STAGING]A HS_local [jiminny@localhost]* console [PRoDJfii users (PROD]© Kernel.php X A console [EU]class kernel excenas consolekernelA6.17AVRestoreTrackscommand:class.HubspotWebhookServiceCommand::class,Tocessneryeuobgectscumliand..class.HubspotJournalPollingCommand::class,SetupJournalDealWebhookSubscriptionsCommand::class,LiscsournaLweonookoudscripczonsconmand..ctdss,kenovebnoscrarctcrpantscommand..classAUcodececcALAccIVIty ypecommand..class.commanos crmLocacciviclescommand..classcommanos crm nacchupporcunicyacclviclescomnand..classPurgevelecedupporcunlclestommand:: classCLeanbupLicarerzelavaracommand:: class,kecryProspeccsummarycommand:: classProcesshubspocubnectssyncbatches:.classsyncupporcun1t1esn1ss1ngr1elavatacommand::classRestorevealassocrarzonscommand::class.orivate Schedule Sschedule:orivate strind Soutout:375 O1protected function schedule(Schedule $schedule): voidt...=1 usageprotected function scheduleEveryMinute: voidt...}"Preparation tor kell.. In sh 10m100% L2• Mon 18 May 11:50:12+0 ..+5-1Implement Trial Owner• UserinvitationDTO.phpThouahts• EditTeamRequest.phpThought for 1s3/5 tasks donebackena changes complered1. CreateTeamRequest.php - Added owner role validation and getter method2. UserinvitationDTO.php - Modified forownero to use role from request + ADMINI3. EditTeamRequest.php - Added owner role prohibition for edit modeCreateTeam.oho does NOT need changes - it only creates the team/CRM contiauration/teatures. The ownerl invitation happens afterin eamcontro ler:astoree vallsen nvtatRemainina trontend chandes.• Add owner role field to EditTeamModal vue (below Owner email)• Move Opportunity Sync Period field to 3rd row, 1st column•Only show owner role field when creatina (not editina))nl «Ask anvthina (*4L)+ &CodeSWE-1.61ditterenceCurrent vercion'driver' => 'errorlog','level' => env('LOG_LEVEL', 'info'),'path' => storage_path('logs/Laravel.log')'custom channel' => ['driver' => 'single','path' => storage_path('loqs/custom.10g')'level' => env('LOG LEVEL', 'info').Po 4 spaces...
|
NULL
|
894631736723944247
|
NULL
|
idle
|
ocr
|
NULL
|
HomeActivityMoreSlackcalVIewMistonWindowhelp@ Desc HomeActivityMoreSlackcalVIewMistonWindowhelp@ Describe what you are looking forJiminny …..v# general#jiminny-bg# plattorm-tickets# product_launches# random# releases# sofa-office# support# thank-yous# the people of iimi.ó Direct messagesNikolav YankovAa Stovan Tomov• Vasil Vasilev• Galva DimitrovaAneliya AngelovaA Stefka Stovanovaa Todor Stamatov "Mario GeorgievNikolav Ivanovdo James Graham3 Stovan Tanevo Steliyan GeorgievPetko KashinskiLukas Kovalik y...::: Aonsi Jira CloudNikolay Yankov• Messagest Add canvasMoreKAк ce kaзвaTodayше дойла пои твояlukas Kovalk 138AMпоати я като owner roleNikolay Yankov 11:39 AMлobреLukas Kovalik 11:40 AM[URL_WITH_CREDENTIALS] CanAccessAiRenortsTest nhn tests/Unit/Policies© CreateMockAskJiminnyReportResultCommand.php app/Console/Commands/RF favicon.ico nublidE ids.txt appTa raw_sqLquery.sql app(C) SimulateWehhooksCommand.nhn ann/Console/Commands/Crm/HubsnotlMI WERHOOK SII TEPING IMDI CMENTATION md anr© CreateTeamRequest.php >© EditTeamRequest.phpal.vueUserinvitationDTo.onguest extends FormRequest0* arrav= implode( separator:",', FeatureEnum::names):equired', 'string', 'max:150'J,=> L'required',emart"l= L'required',"n'recorden recorden and voice anal vsti]l→> ['required','uuid:accounts'],['required','string', 'max:150']quired', 'string', 'max:150'],['array'],=> ['in:' . SexistingFeatures],'sometimes', 'nullable','max:150'],['required', 'uuid:tiers']=> ['sometimes', 'nullable', 'uuid:partners']->1nput key: 'teatures')*ureEnum::DIALER->name, $features)) {a address rulesis->qetBillingAddressRules@:→ E Side-by-side viewerDo not ianorey8bb2 config/logging.php'driver' =>"ennonlod!'level' => env('LOG _LEVEL', 'info'),'path' => storage_path('logs/Laravel.log').=custom.log4 SF [jiminny@localhost]A console [STAGING]A HS_local [jiminny@localhost]* console [PRoDJfii users (PROD]© Kernel.php X A console [EU]class kernel excenas consolekernelA6.17AVRestoreTrackscommand:class.HubspotWebhookServiceCommand::class,Tocessneryeuobgectscumliand..class.HubspotJournalPollingCommand::class,SetupJournalDealWebhookSubscriptionsCommand::class,LiscsournaLweonookoudscripczonsconmand..ctdss,kenovebnoscrarctcrpantscommand..classAUcodececcALAccIVIty ypecommand..class.commanos crmLocacciviclescommand..classcommanos crm nacchupporcunicyacclviclescomnand..classPurgevelecedupporcunlclestommand:: classCLeanbupLicarerzelavaracommand:: class,kecryProspeccsummarycommand:: classProcesshubspocubnectssyncbatches:.classsyncupporcun1t1esn1ss1ngr1elavatacommand::classRestorevealassocrarzonscommand::class.orivate Schedule Sschedule:orivate strind Soutout:375 O1protected function schedule(Schedule $schedule): voidt...=1 usageprotected function scheduleEveryMinute: voidt...}"Preparation tor kell.. In sh 10m100% L2• Mon 18 May 11:50:12+0 ..+5-1Implement Trial Owner• UserinvitationDTO.phpThouahts• EditTeamRequest.phpThought for 1s3/5 tasks donebackena changes complered1. CreateTeamRequest.php - Added owner role validation and getter method2. UserinvitationDTO.php - Modified forownero to use role from request + ADMINI3. EditTeamRequest.php - Added owner role prohibition for edit modeCreateTeam.oho does NOT need changes - it only creates the team/CRM contiauration/teatures. The ownerl invitation happens afterin eamcontro ler:astoree vallsen nvtatRemainina trontend chandes.• Add owner role field to EditTeamModal vue (below Owner email)• Move Opportunity Sync Period field to 3rd row, 1st column•Only show owner role field when creatina (not editina))nl «Ask anvthina (*4L)+ &CodeSWE-1.61ditterenceCurrent vercion'driver' => 'errorlog','level' => env('LOG_LEVEL', 'info'),'path' => storage_path('logs/Laravel.log')'custom channel' => ['driver' => 'single','path' => storage_path('loqs/custom.10g')'level' => env('LOG LEVEL', 'info').Po 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51622
|
1813
|
1
|
2026-05-18T08:50:42.773507+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094242773_m1.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowH iTerm2ShellEditViewSessionScriptsProfilesWindowHelp₴81+++-Preparation for Refi... in 3h 10 mAPP (-zsh)100% <78• Mon 18 May 11:50:42screenpipe*T81O ₴4DOCKERPIPEDRIVE_V2_MIGRATION_TICKETS.md52DEV (docker)++++++++++₴2APP (-zsh)1 file changed, 52 insertions(+)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (pipedrive-sdk-poc) $co master. env.localconfig/logging.phpSwitched to branch'master'Your branch is behind 'origin/master' by 31 commits, and can be fast-forwarded.Cuse"git pull"to update your local branch)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pullUpdating 31c62924a5..cb4ebf0c36Fast-forwardapp/Component/ES/Processor/Traits/SelectEntityListTrait.phpapp/Services/Calendar/CalendarActivityService.phpapp/Services/Calendar/Command/MapActivityData.phpdocs/mcp/explorer/explorer.htmldocs/mcp/explorer/explorer.template.htmldocs/mcp/tools-list.jsondocs/mcp/tools.mdtests/Unit/Component/ES/AsyncUpdateElasticSearchTest.phptests/Unit/Component/ES/Listeners/UpdateMultipleTargetsListenerTest.php204611061041023731171610++++++++++++++++++++tests/Unit/Component/ES/Listeners/UpdateSingleTargetListenerTest.phptests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.phptests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.phptests/Unit/Component/ES/UpdateProcessManagerTest.phptests/Unit/Services/Calendar/CalendarActivityServiceTest.phptests/Unit/Services/Calendar/Command/MapActivityDataTest.php91521507815 files changed, 832 insertions(+), 322 deletions(-)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co -b JY-20613-allow-owner-role-on-team-setupSwitched to a new branch 'JY-20613-allow-owner-role-on-team-setup'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ csfixdocker exec-it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diffPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminskiand contributors.PHP runtime: 8.3.30Running analysis on 7 cores with 10 files per process.Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!Loadedconfig default from".php-cs-fixer.dist.php".5682/5682 [8100%APPFixed 0 of 5682 files in 56.978 seconds, 67.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any containeror image + docker debug docker_lamp_1Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ ||...
|
NULL
|
-1175129745962008640
|
NULL
|
idle
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowH iTerm2ShellEditViewSessionScriptsProfilesWindowHelp₴81+++-Preparation for Refi... in 3h 10 mAPP (-zsh)100% <78• Mon 18 May 11:50:42screenpipe*T81O ₴4DOCKERPIPEDRIVE_V2_MIGRATION_TICKETS.md52DEV (docker)++++++++++₴2APP (-zsh)1 file changed, 52 insertions(+)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (pipedrive-sdk-poc) $co master. env.localconfig/logging.phpSwitched to branch'master'Your branch is behind 'origin/master' by 31 commits, and can be fast-forwarded.Cuse"git pull"to update your local branch)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pullUpdating 31c62924a5..cb4ebf0c36Fast-forwardapp/Component/ES/Processor/Traits/SelectEntityListTrait.phpapp/Services/Calendar/CalendarActivityService.phpapp/Services/Calendar/Command/MapActivityData.phpdocs/mcp/explorer/explorer.htmldocs/mcp/explorer/explorer.template.htmldocs/mcp/tools-list.jsondocs/mcp/tools.mdtests/Unit/Component/ES/AsyncUpdateElasticSearchTest.phptests/Unit/Component/ES/Listeners/UpdateMultipleTargetsListenerTest.php204611061041023731171610++++++++++++++++++++tests/Unit/Component/ES/Listeners/UpdateSingleTargetListenerTest.phptests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.phptests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.phptests/Unit/Component/ES/UpdateProcessManagerTest.phptests/Unit/Services/Calendar/CalendarActivityServiceTest.phptests/Unit/Services/Calendar/Command/MapActivityDataTest.php91521507815 files changed, 832 insertions(+), 322 deletions(-)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co -b JY-20613-allow-owner-role-on-team-setupSwitched to a new branch 'JY-20613-allow-owner-role-on-team-setup'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ csfixdocker exec-it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diffPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminskiand contributors.PHP runtime: 8.3.30Running analysis on 7 cores with 10 files per process.Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!Loadedconfig default from".php-cs-fixer.dist.php".5682/5682 [8100%APPFixed 0 of 5682 files in 56.978 seconds, 67.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any containeror image + docker debug docker_lamp_1Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ ||...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51623
|
1814
|
1
|
2026-05-18T08:50:43.616921+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094243616_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
HomeActivityMoreSlackcalVIewMistonWindowhelp@ Desc HomeActivityMoreSlackcalVIewMistonWindowhelp@ Describe what you are looking forJiminny …..v# general#jiminny-bg# plattorm-tickets# product_launches# random# releases# sofa-office# support# thank-yous# the people of iimi.ó Direct messagesNikolav YankovAa Stovan Tomov• Vasil Vasilev• Galva DimitrovaAneliya AngelovaA Stefka Stovanovaa Todor Stamatov "Mario GeorgievNikolav Ivanovdo James Graham3 Stovan Tanevo Steliyan GeorgievPetko KashinskiLukas Kovalik y...::: Aonsi Jira CloudNikolay Yankov• Messagest Add canvasMoreKAк ce kaзвaTodayше дойла пои твояlukas Kovalk 138AMпоати я като owner roleNikolay Yankov 11:39 AMлobреLukas Kovalik 11:40 AM[URL_WITH_CREDENTIALS] CanAccessAiRenortsTest nhn tests/Unit/Policies© CreateMockAskJiminnyReportResultCommand.php app/Console/Commands/RF favicon.ico nublidE ids.txt appTa raw_sqLquery.sql app(C) SimulateWehhooksCommand.nhn ann/Console/Commands/Crm/HubsnotlMI WERHOOK SII TEPING IMDI CMENTATION md anr© CreateTeamRequest.php >© EditTeamRequest.phpal.vueUserinvitationDTo.onguest extends FormRequest0* arrav= implode( separator:",', FeatureEnum::names):equired', 'string', 'max:150'J,=> L'required',emart"l= L'required',"n'recorden recorden and voice anal vsti]l→> ['required','uuid:accounts'],['required','string', 'max:150']quired', 'string', 'max:150'],['array'],=> ['in:' . SexistingFeatures],'sometimes', 'nullable','max:150'],['required', 'uuid:tiers']=> ['sometimes', 'nullable', 'uuid:partners']->1nput key: 'teatures')*ureEnum::DIALER->name, $features)) {a address rulesis->qetBillingAddressRules@:→ E Side-by-side viewerDo not ianorey8bb2 config/logging.php'driver' =>"ennonlod!'level' => env('LOG _LEVEL', 'info'),'path' => storage_path('logs/Laravel.log').=custom.log4 SF [jiminny@localhost]A console [STAGING]A HS_local [jiminny@localhost]* console [PRoDJfii users (PROD]© Kernel.php X A console [EU]class kernel excenas consolekernelA6.17AVRestoreTrackscommand:class.HubspotWebhookServiceCommand::class,Tocessneryeuobgectscumliand..class.HubspotJournalPollingCommand::class,SetupJournalDealWebhookSubscriptionsCommand::class,LiscsournaLweonookoudscripczonsconmand..ctdss,kenovebnoscrarctcrpantscommand..classAUcodececcALAccIVIty ypecommand..class.commanos crmLocacciviclescommand..classcommanos crm nacchupporcunicyacclviclescomnand..classPurgevelecedupporcunlclestommand:: classCLeanbupLicarerzelavaracommand:: class,kecryProspeccsummarycommand:: classProcesshubspocubnectssyncbatches:.classsyncupporcun1t1esn1ss1ngr1elavatacommand::classRestorevealassocrarzonscommand::class.orivate Schedule Sschedule:orivate strind Soutout:375 O1protected function schedule(Schedule $schedule): voidt...=1 usageprotected function scheduleEveryMinute: voidt...}"Preparation tor kell.. In sh 10m100% L2• Mon 18 May 11:50:43+0 ..+5-1Implement Trial Owner• UserinvitationDTO.phpThouahts• EditTeamRequest.phpThought for 1s3/5 tasks donebackena changes complered1. CreateTeamRequest.php - Added owner role validation and getter method2. UserinvitationDTO.php - Modified forownero to use role from request + ADMINI3. EditTeamRequest.php - Added owner role prohibition for edit modeCreateTeam.oho does NOT need changes - it only creates the team/CRM contiauration/teatures. The ownerl invitation happens afterin eamcontro ler:astoree vallsen nvtatRemainina trontend chandes.• Add owner role field to EditTeamModal vue (below Owner email)• Move Opportunity Sync Period field to 3rd row, 1st column•Only show owner role field when creatina (not editina))nl «Ask anvthina (*4L)+ &CodeSWE-1.61ditterenceCurrent vercion'driver' => 'errorlog','level' => env('LOG_LEVEL', 'info'),'path' => storage_path('logs/Laravel.log')'custom channel' => ['driver' => 'single','path' => storage_path('loqs/custom.10g')'level' => env('LOG LEVEL', 'info').Po 4 spaces...
|
NULL
|
-6994242472142077864
|
NULL
|
idle
|
ocr
|
NULL
|
HomeActivityMoreSlackcalVIewMistonWindowhelp@ Desc HomeActivityMoreSlackcalVIewMistonWindowhelp@ Describe what you are looking forJiminny …..v# general#jiminny-bg# plattorm-tickets# product_launches# random# releases# sofa-office# support# thank-yous# the people of iimi.ó Direct messagesNikolav YankovAa Stovan Tomov• Vasil Vasilev• Galva DimitrovaAneliya AngelovaA Stefka Stovanovaa Todor Stamatov "Mario GeorgievNikolav Ivanovdo James Graham3 Stovan Tanevo Steliyan GeorgievPetko KashinskiLukas Kovalik y...::: Aonsi Jira CloudNikolay Yankov• Messagest Add canvasMoreKAк ce kaзвaTodayше дойла пои твояlukas Kovalk 138AMпоати я като owner roleNikolay Yankov 11:39 AMлobреLukas Kovalik 11:40 AM[URL_WITH_CREDENTIALS] CanAccessAiRenortsTest nhn tests/Unit/Policies© CreateMockAskJiminnyReportResultCommand.php app/Console/Commands/RF favicon.ico nublidE ids.txt appTa raw_sqLquery.sql app(C) SimulateWehhooksCommand.nhn ann/Console/Commands/Crm/HubsnotlMI WERHOOK SII TEPING IMDI CMENTATION md anr© CreateTeamRequest.php >© EditTeamRequest.phpal.vueUserinvitationDTo.onguest extends FormRequest0* arrav= implode( separator:",', FeatureEnum::names):equired', 'string', 'max:150'J,=> L'required',emart"l= L'required',"n'recorden recorden and voice anal vsti]l→> ['required','uuid:accounts'],['required','string', 'max:150']quired', 'string', 'max:150'],['array'],=> ['in:' . SexistingFeatures],'sometimes', 'nullable','max:150'],['required', 'uuid:tiers']=> ['sometimes', 'nullable', 'uuid:partners']->1nput key: 'teatures')*ureEnum::DIALER->name, $features)) {a address rulesis->qetBillingAddressRules@:→ E Side-by-side viewerDo not ianorey8bb2 config/logging.php'driver' =>"ennonlod!'level' => env('LOG _LEVEL', 'info'),'path' => storage_path('logs/Laravel.log').=custom.log4 SF [jiminny@localhost]A console [STAGING]A HS_local [jiminny@localhost]* console [PRoDJfii users (PROD]© Kernel.php X A console [EU]class kernel excenas consolekernelA6.17AVRestoreTrackscommand:class.HubspotWebhookServiceCommand::class,Tocessneryeuobgectscumliand..class.HubspotJournalPollingCommand::class,SetupJournalDealWebhookSubscriptionsCommand::class,LiscsournaLweonookoudscripczonsconmand..ctdss,kenovebnoscrarctcrpantscommand..classAUcodececcALAccIVIty ypecommand..class.commanos crmLocacciviclescommand..classcommanos crm nacchupporcunicyacclviclescomnand..classPurgevelecedupporcunlclestommand:: classCLeanbupLicarerzelavaracommand:: class,kecryProspeccsummarycommand:: classProcesshubspocubnectssyncbatches:.classsyncupporcun1t1esn1ss1ngr1elavatacommand::classRestorevealassocrarzonscommand::class.orivate Schedule Sschedule:orivate strind Soutout:375 O1protected function schedule(Schedule $schedule): voidt...=1 usageprotected function scheduleEveryMinute: voidt...}"Preparation tor kell.. In sh 10m100% L2• Mon 18 May 11:50:43+0 ..+5-1Implement Trial Owner• UserinvitationDTO.phpThouahts• EditTeamRequest.phpThought for 1s3/5 tasks donebackena changes complered1. CreateTeamRequest.php - Added owner role validation and getter method2. UserinvitationDTO.php - Modified forownero to use role from request + ADMINI3. EditTeamRequest.php - Added owner role prohibition for edit modeCreateTeam.oho does NOT need changes - it only creates the team/CRM contiauration/teatures. The ownerl invitation happens afterin eamcontro ler:astoree vallsen nvtatRemainina trontend chandes.• Add owner role field to EditTeamModal vue (below Owner email)• Move Opportunity Sync Period field to 3rd row, 1st column•Only show owner role field when creatina (not editina))nl «Ask anvthina (*4L)+ &CodeSWE-1.61ditterenceCurrent vercion'driver' => 'errorlog','level' => env('LOG_LEVEL', 'info'),'path' => storage_path('logs/Laravel.log')'custom channel' => ['driver' => 'single','path' => storage_path('loqs/custom.10g')'level' => env('LOG LEVEL', 'info').Po 4 spaces...
|
51621
|
NULL
|
NULL
|
NULL
|
|
51624
|
1813
|
2
|
2026-05-18T08:51:13.515412+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094273515_m1.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowH iTerm2ShellEditViewSessionScriptsProfilesWindowHelp₴81+++Preparation for Refi... in 3 h 9 mAPP (-zsh)100% <78• Mon 18 May 11:51:13ffmpegT81O ₴4DOCKERPIPEDRIVE_V2_MIGRATION_TICKETS.md52DEV (docker)++++++++++₴2APP (-zsh)1 file changed, 52 insertions(+)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (pipedrive-sdk-poc) $co master. env. localconfig/logging.phpSwitched to branch'master'Your branch is behind 'origin/master' by 31 commits, and can be fast-forwarded.Cuse"git pull"to update your local branch)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pullUpdating 31c62924a5..cb4ebf0c36Fast-forwardapp/Component/ES/Processor/Traits/SelectEntityListTrait.phpapp/Services/Calendar/CalendarActivityService.phpapp/Services/Calendar/Command/MapActivityData.phpdocs/mcp/explorer/explorer.htmldocs/mcp/explorer/explorer.template.htmldocs/mcp/tools-list.jsondocs/mcp/tools.mdtests/Unit/Component/ES/AsyncUpdateElasticSearchTest.phptests/Unit/Component/ES/Listeners/UpdateMultipleTargetsListenerTest.php204611061041023731171610++++++++++++++++++++tests/Unit/Component/ES/Listeners/UpdateSingleTargetListenerTest.phptests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.phptests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.phptests/Unit/Component/ES/UpdateProcessManagerTest.phptests/Unit/Services/Calendar/CalendarActivityServiceTest.phptests/Unit/Services/Calendar/Command/MapActivityDataTest.php91521507815 files changed, 832 insertions(+), 322 deletions(-)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co -b JY-20613-allow-owner-role-on-team-setupSwitched to a new branch 'JY-20613-allow-owner-role-on-team-setup'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ csfixdocker exec-it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diffPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminskiand contributors.PHP runtime: 8.3.30Running analysis on 7 cores with 10 files per process.Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!Loadedconfig default from".php-cs-fixer.dist.php".5682/5682 [8100%APPFixed 0 of 5682 files in 56.978 seconds, 67.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any containeror image + docker debug docker_lamp_1Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ ||...
|
NULL
|
8145661980733457876
|
NULL
|
idle
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowH iTerm2ShellEditViewSessionScriptsProfilesWindowHelp₴81+++Preparation for Refi... in 3 h 9 mAPP (-zsh)100% <78• Mon 18 May 11:51:13ffmpegT81O ₴4DOCKERPIPEDRIVE_V2_MIGRATION_TICKETS.md52DEV (docker)++++++++++₴2APP (-zsh)1 file changed, 52 insertions(+)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (pipedrive-sdk-poc) $co master. env. localconfig/logging.phpSwitched to branch'master'Your branch is behind 'origin/master' by 31 commits, and can be fast-forwarded.Cuse"git pull"to update your local branch)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pullUpdating 31c62924a5..cb4ebf0c36Fast-forwardapp/Component/ES/Processor/Traits/SelectEntityListTrait.phpapp/Services/Calendar/CalendarActivityService.phpapp/Services/Calendar/Command/MapActivityData.phpdocs/mcp/explorer/explorer.htmldocs/mcp/explorer/explorer.template.htmldocs/mcp/tools-list.jsondocs/mcp/tools.mdtests/Unit/Component/ES/AsyncUpdateElasticSearchTest.phptests/Unit/Component/ES/Listeners/UpdateMultipleTargetsListenerTest.php204611061041023731171610++++++++++++++++++++tests/Unit/Component/ES/Listeners/UpdateSingleTargetListenerTest.phptests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.phptests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.phptests/Unit/Component/ES/UpdateProcessManagerTest.phptests/Unit/Services/Calendar/CalendarActivityServiceTest.phptests/Unit/Services/Calendar/Command/MapActivityDataTest.php91521507815 files changed, 832 insertions(+), 322 deletions(-)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co -b JY-20613-allow-owner-role-on-team-setupSwitched to a new branch 'JY-20613-allow-owner-role-on-team-setup'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ csfixdocker exec-it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diffPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminskiand contributors.PHP runtime: 8.3.30Running analysis on 7 cores with 10 files per process.Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!Loadedconfig default from".php-cs-fixer.dist.php".5682/5682 [8100%APPFixed 0 of 5682 files in 56.978 seconds, 67.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any containeror image + docker debug docker_lamp_1Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ ||...
|
51622
|
NULL
|
NULL
|
NULL
|
|
51625
|
1814
|
2
|
2026-05-18T08:51:14.427067+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094274427_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
HomeActivityMoreSlackcalVIewMistonWindowhelp@ Desc HomeActivityMoreSlackcalVIewMistonWindowhelp@ Describe what you are looking forJiminny …..v# general#jiminny-bg# plattorm-tickets# product_launches# random# releases# sofa-office# support# thank-yous# the people of iimi.ó Direct messagesNikolav YankovAa Stovan Tomov• Vasil Vasilev• Galva DimitrovaAneliya AngelovaA Stefka Stovanovaa Todor Stamatov "Mario GeorgievNikolav Ivanovdo James Graham3 Stovan Tanevo Steliyan GeorgievPetko KashinskiLukas Kovalik y...::: Aonsi Jira CloudNikolay Yankov• Messagest Add canvasMoreKAк ce kaзвaTodayше дойла пои твояlukas Kovalk 138AMпоати я като owner roleNikolay Yankov 11:39 AMлobреLukas Kovalik 11:40 AM[URL_WITH_CREDENTIALS] CanAccessAiRenortsTest nhn tests/Unit/Policies© CreateMockAskJiminnyReportResultCommand.php app/Console/Commands/RF favicon.ico nublidE ids.txt appTa raw_sqLquery.sql app(C) SimulateWehhooksCommand.nhn ann/Console/Commands/Crm/HubsnotlMI WERHOOK SII TEPING IMDI CMENTATION md anr© CreateTeamRequest.php >© EditTeamRequest.phpal.vueUserinvitationDTO.onguest extends FormRequest0* arrav= implode( separator:",', FeatureEnum::names):equired', 'string', 'max:150'J,=> L'required',emart"l= L'required',"n'recorden recorden and voice anal vsti]l→> ['required','uuid:accounts'],['required','string', 'max:150']quired', 'string', 'max:150'],['array'],=> ['in:' . SexistingFeatures],'sometimes', 'nullable','max:150'],['required', 'uuid:tiers']=> ['sometimes', 'nullable', 'uuid:partners']->1nput key: 'teatures')*ureEnum::DIALER->name, $features)) {a address rulesis->qetBillingAddressRules@:→ E Side-by-side viewerDo not ianorey8bb2 config/logging.php'driver' =>"ennonlod!'level' => env('LOG _LEVEL', 'info'),'path' => storage_path('logs/Laravel.log').=custom.log4 SF [jiminny@localhost]A console [STAGING]A HS_local [jiminny@localhost]* console [PRoDJfii users (PROD]© Kernel.php X A console [EU]class kernel excenas consolekernelA6.17AVRestoreTrackscommand:class.HubspotWebhookServiceCommand::class,Tocessneryeuobgectscumliand..class.HubspotJournalPollingCommand::class,SetupJournalDealWebhookSubscriptionsCommand::class,LiscsournaLweonookoudscripczonsconmand..ctdss,kenovebnoscrarctcrpantscommand..classAUcodececcALAccIVIty ypecommand..class.commanos crmLocacciviclescommand..classcommanos crm nacchupporcunicyacclviclescomnand..classPurgevelecedupporcunlclestommand:: classCLeanbupLicarerzelavaracommand:: class,kecryProspeccsummarycommand:: classProcesshubspocubnectssyncbatches:.classsyncupporcun1t1esn1ss1ngr1elavatacommand::classRestorevealassocrarzonscommand::class.orivate Schedule Sschedule:orivate strind Soutout:375 O1protected function schedule(Schedule $schedule): voidt...=1 usageprotected function scheduleEveryMinute: voidt...}# Preparation for Refi... in 3 h 9 m100% L2• Mon 18 May 11:51:14+0 ..+5-1Implement Trial Owner• UserinvitationDTO.phpThouahts• EditTeamRequest.phpThought for 1s3/5 tasks donebackena changes complered1. CreateTeamRequest.php - Added owner role validation and getter method2. UserinvitationDTO.php - Modified forownero to use role from request + ADMINI3. EditTeamRequest.php - Added owner role prohibition for edit modeCreateTeam.oho does NOT need changes - it only creates the team/CRM contiauration/teatures. The ownerl invitation happens afterin eamcontro ler:astoree vallsen nvtatRemainina trontend chandes.• Add owner role field to EditTeamModal vue (below Owner email)• Move Opportunity Sync Period field to 3rd row, 1st column•Only show owner role field when creatina (not editina))nl «Ask anvthina (*4L)+ &CodeSWE-1.61ditterenceCurrent vercion'driver' => 'errorlog','level' => env('LOG_LEVEL', 'info'),'path' => storage_path('logs/Laravel.log')'custom channel' => ['driver' => 'single','path' => storage_path('loqs/custom.10g')'level' => env('LOG LEVEL', 'info').Po 4 spaces...
|
NULL
|
-6204736879267102786
|
NULL
|
idle
|
ocr
|
NULL
|
HomeActivityMoreSlackcalVIewMistonWindowhelp@ Desc HomeActivityMoreSlackcalVIewMistonWindowhelp@ Describe what you are looking forJiminny …..v# general#jiminny-bg# plattorm-tickets# product_launches# random# releases# sofa-office# support# thank-yous# the people of iimi.ó Direct messagesNikolav YankovAa Stovan Tomov• Vasil Vasilev• Galva DimitrovaAneliya AngelovaA Stefka Stovanovaa Todor Stamatov "Mario GeorgievNikolav Ivanovdo James Graham3 Stovan Tanevo Steliyan GeorgievPetko KashinskiLukas Kovalik y...::: Aonsi Jira CloudNikolay Yankov• Messagest Add canvasMoreKAк ce kaзвaTodayше дойла пои твояlukas Kovalk 138AMпоати я като owner roleNikolay Yankov 11:39 AMлobреLukas Kovalik 11:40 AM[URL_WITH_CREDENTIALS] CanAccessAiRenortsTest nhn tests/Unit/Policies© CreateMockAskJiminnyReportResultCommand.php app/Console/Commands/RF favicon.ico nublidE ids.txt appTa raw_sqLquery.sql app(C) SimulateWehhooksCommand.nhn ann/Console/Commands/Crm/HubsnotlMI WERHOOK SII TEPING IMDI CMENTATION md anr© CreateTeamRequest.php >© EditTeamRequest.phpal.vueUserinvitationDTO.onguest extends FormRequest0* arrav= implode( separator:",', FeatureEnum::names):equired', 'string', 'max:150'J,=> L'required',emart"l= L'required',"n'recorden recorden and voice anal vsti]l→> ['required','uuid:accounts'],['required','string', 'max:150']quired', 'string', 'max:150'],['array'],=> ['in:' . SexistingFeatures],'sometimes', 'nullable','max:150'],['required', 'uuid:tiers']=> ['sometimes', 'nullable', 'uuid:partners']->1nput key: 'teatures')*ureEnum::DIALER->name, $features)) {a address rulesis->qetBillingAddressRules@:→ E Side-by-side viewerDo not ianorey8bb2 config/logging.php'driver' =>"ennonlod!'level' => env('LOG _LEVEL', 'info'),'path' => storage_path('logs/Laravel.log').=custom.log4 SF [jiminny@localhost]A console [STAGING]A HS_local [jiminny@localhost]* console [PRoDJfii users (PROD]© Kernel.php X A console [EU]class kernel excenas consolekernelA6.17AVRestoreTrackscommand:class.HubspotWebhookServiceCommand::class,Tocessneryeuobgectscumliand..class.HubspotJournalPollingCommand::class,SetupJournalDealWebhookSubscriptionsCommand::class,LiscsournaLweonookoudscripczonsconmand..ctdss,kenovebnoscrarctcrpantscommand..classAUcodececcALAccIVIty ypecommand..class.commanos crmLocacciviclescommand..classcommanos crm nacchupporcunicyacclviclescomnand..classPurgevelecedupporcunlclestommand:: classCLeanbupLicarerzelavaracommand:: class,kecryProspeccsummarycommand:: classProcesshubspocubnectssyncbatches:.classsyncupporcun1t1esn1ss1ngr1elavatacommand::classRestorevealassocrarzonscommand::class.orivate Schedule Sschedule:orivate strind Soutout:375 O1protected function schedule(Schedule $schedule): voidt...=1 usageprotected function scheduleEveryMinute: voidt...}# Preparation for Refi... in 3 h 9 m100% L2• Mon 18 May 11:51:14+0 ..+5-1Implement Trial Owner• UserinvitationDTO.phpThouahts• EditTeamRequest.phpThought for 1s3/5 tasks donebackena changes complered1. CreateTeamRequest.php - Added owner role validation and getter method2. UserinvitationDTO.php - Modified forownero to use role from request + ADMINI3. EditTeamRequest.php - Added owner role prohibition for edit modeCreateTeam.oho does NOT need changes - it only creates the team/CRM contiauration/teatures. The ownerl invitation happens afterin eamcontro ler:astoree vallsen nvtatRemainina trontend chandes.• Add owner role field to EditTeamModal vue (below Owner email)• Move Opportunity Sync Period field to 3rd row, 1st column•Only show owner role field when creatina (not editina))nl «Ask anvthina (*4L)+ &CodeSWE-1.61ditterenceCurrent vercion'driver' => 'errorlog','level' => env('LOG_LEVEL', 'info'),'path' => storage_path('logs/Laravel.log')'custom channel' => ['driver' => 'single','path' => storage_path('loqs/custom.10g')'level' => env('LOG LEVEL', 'info').Po 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51626
|
1814
|
3
|
2026-05-18T08:51:30.816805+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094290816_m2.jpg...
|
Firefox
|
Pipelines - jiminny/app — Work
|
1
|
app.circleci.com/pipelines/github/jiminny/app
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
Project Outline app
app
app
app
Overview
Overview
Settings
Settings
Deploys
Deploys
Lightning Manage triggers
Manage triggers
Trigger Pipeline
Pipelines All pipelines my-pipelines-filter
All pipelines
app Project Filter. Selected "app"
app
All branches Branch Filter. Selected "All branches"
All branches
Start Time Cutoff date Arrow Drop Down
Cutoff date
All statuses Arrow Drop Down
All
statuses
Filter Display options
Display options
Pipeline
Status
Workflow
Checkout source
Trigger event
Start
Duration
Actions
app
58490
58490
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
23m 23s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Open commit on version control site
d94a285
Merge branch 'master' into JY-20808-low-priority-indexing-queue
Push
Commit pushed
Copy timestamp to clipboard
1m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
RUNNING job checkout-code
checkout-code
888485
1m 21s
1m 21s
build-frontend
888486
test-frontend
888487
build-backend
888488
phpstan
888492
setup
888490
test
888491
test-backend-lint
888489
sonar_cloud
888493
SUCCESS workflow setup-workflow. Collapse the workflow jobs list.
Status Passed Success
Success
setup-workflow
setup-workflow
SETUP
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Open commit on version control site
d94a285
Merge branch 'master' into JY-20808-low-priority-indexing-queue
Push
Commit pushed
Copy timestamp to clipboard
2m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job setup
setup
888475
56s
56s
app
58489
58489
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
22m 47s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20893-chunk-control-per-update-target
JY-20893-chunk-control-per-update-target
Open commit on version control site
fb4a7f6
Merge branch 'master' into JY-20893-chunk-control-per-update-target
Push
Commit pushed
Copy timestamp to clipboard
1m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job checkout-code
checkout-code
888476
1m 18s
1m 18s
RUNNING job build-frontend
build-frontend
888477
37s
37s
test-frontend
888478
RUNNING job build-backend
build-backend
888479
36s
36s
phpstan
888483
setup
888481
test
888482
test-backend-lint
888480
sonar_cloud
888484
SUCCESS workflow setup-workflow. Collapse the workflow jobs list.
Status Passed Success
Success
setup-workflow
setup-workflow
SETUP
JY-20893-chunk-control-per-update-target
JY-20893-chunk-control-per-update-target
Open commit on version control site
fb4a7f6
Merge branch 'master' into JY-20893-chunk-control-per-update-target
Push
Commit pushed
Copy timestamp to clipboard
2m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job setup
setup
888474
37s
37s
app
58488
58488
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
12m 24s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20920-fix-participant-matcher
JY-20920-fix-participant-matcher
Open commit on version control site
eb6cfc4
JY-20920: Fix participant matcher
Push
Commit pushed...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.042719416,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1590758,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.18994413,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.21707901,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Go to home page","depth":9,"bounds":{"left":0.08726729,"top":0.061452515,"width":0.044215426,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Auto theme","depth":9,"bounds":{"left":0.9375,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open notifications","depth":9,"bounds":{"left":0.95212764,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open support menu","depth":9,"bounds":{"left":0.96675533,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open user menu","depth":9,"bounds":{"left":0.98138297,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"org avatar Current organization: jiminny","depth":9,"bounds":{"left":0.08693484,"top":0.10295291,"width":0.01462766,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Home","depth":10,"bounds":{"left":0.08494016,"top":0.15083799,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":12,"bounds":{"left":0.087765954,"top":0.1839585,"width":0.012965426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines","depth":10,"bounds":{"left":0.08494016,"top":0.21308859,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines","depth":12,"bounds":{"left":0.083942816,"top":0.2462091,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":10,"bounds":{"left":0.08494016,"top":0.2753392,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":12,"bounds":{"left":0.0852726,"top":0.3084597,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":10,"bounds":{"left":0.08494016,"top":0.33798882,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":12,"bounds":{"left":0.08543883,"top":0.37071028,"width":0.01761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":10,"bounds":{"left":0.08494016,"top":0.40023944,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":12,"bounds":{"left":0.085605055,"top":0.4329609,"width":0.017287234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Runners","depth":10,"bounds":{"left":0.08494016,"top":0.46249002,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Runners","depth":12,"bounds":{"left":0.0852726,"top":0.49561054,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Org","depth":10,"bounds":{"left":0.08494016,"top":0.52474064,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Org","depth":12,"bounds":{"left":0.090259306,"top":0.55786115,"width":0.007978723,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Plan","depth":10,"bounds":{"left":0.08494016,"top":0.58699125,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Plan","depth":12,"bounds":{"left":0.08959442,"top":0.6201117,"width":0.00930851,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk sidecars","depth":11,"bounds":{"left":0.07962101,"top":0.8591381,"width":0.02925532,"height":0.059457302},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk sidecars","depth":13,"bounds":{"left":0.08494016,"top":0.8922586,"width":0.01861702,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PREVIEW","depth":12,"bounds":{"left":0.08743351,"top":0.8567438,"width":0.013630319,"height":0.009177973},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk","depth":10,"bounds":{"left":0.07962101,"top":0.9345571,"width":0.02925532,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk","depth":12,"bounds":{"left":0.08726729,"top":0.96727854,"width":0.013962766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard All Pipelines","depth":15,"bounds":{"left":0.1171875,"top":0.1245012,"width":0.042054523,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Pipelines","depth":16,"bounds":{"left":0.1278258,"top":0.12609737,"width":0.030086435,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Project Outline app","depth":15,"bounds":{"left":0.16472739,"top":0.1245012,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":16,"bounds":{"left":0.17536569,"top":0.12609737,"width":0.009807181,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"app","depth":13,"bounds":{"left":0.1278258,"top":0.16400638,"width":0.016954787,"height":0.029130088},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":14,"bounds":{"left":0.1278258,"top":0.16480447,"width":0.016954787,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Overview","depth":13,"bounds":{"left":0.1171875,"top":0.19952115,"width":0.024102394,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Overview","depth":14,"bounds":{"left":0.1171875,"top":0.20151636,"width":0.024102394,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":13,"bounds":{"left":0.14660904,"top":0.19952115,"width":0.021110373,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.14660904,"top":0.20151636,"width":0.021110373,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":13,"bounds":{"left":0.17303856,"top":0.19952115,"width":0.020611702,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":14,"bounds":{"left":0.17303856,"top":0.20151636,"width":0.020611702,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Lightning Manage triggers","depth":13,"bounds":{"left":0.87017953,"top":0.16400638,"width":0.057845745,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Manage triggers","depth":15,"bounds":{"left":0.88613695,"top":0.17318435,"width":0.03656915,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Trigger Pipeline","depth":13,"bounds":{"left":0.9333444,"top":0.16400638,"width":0.0546875,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pipelines All pipelines my-pipelines-filter","depth":13,"bounds":{"left":0.1171875,"top":0.23782921,"width":0.053523935,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All pipelines","depth":16,"bounds":{"left":0.13081782,"top":0.24700718,"width":0.026263298,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"app Project Filter. Selected \"app\"","depth":13,"bounds":{"left":0.17337102,"top":0.23782921,"width":0.034242023,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app","depth":16,"bounds":{"left":0.18567154,"top":0.24700718,"width":0.00831117,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"All branches Branch Filter. Selected \"All branches\"","depth":13,"bounds":{"left":0.21027261,"top":0.23782921,"width":0.053025264,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All branches","depth":16,"bounds":{"left":0.22257313,"top":0.24700718,"width":0.027094414,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Start Time Cutoff date Arrow Drop Down","depth":13,"bounds":{"left":0.26595744,"top":0.23782921,"width":0.051030584,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cutoff date","depth":15,"bounds":{"left":0.27825797,"top":0.24700718,"width":0.025099734,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"All statuses Arrow Drop Down","depth":13,"bounds":{"left":0.3196476,"top":0.23782921,"width":0.043218084,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All","depth":14,"bounds":{"left":0.32396942,"top":0.24700718,"width":0.0066489363,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"statuses","depth":14,"bounds":{"left":0.33061835,"top":0.24700718,"width":0.01861702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filter Display options","depth":13,"bounds":{"left":0.9333444,"top":0.2386273,"width":0.0546875,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Display options","depth":14,"bounds":{"left":0.94830453,"top":0.24780527,"width":0.034075797,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pipeline","depth":14,"bounds":{"left":0.12250665,"top":0.3196329,"width":0.015292553,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Status","depth":14,"bounds":{"left":0.28740028,"top":0.3196329,"width":0.012632979,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Workflow","depth":14,"bounds":{"left":0.34424868,"top":0.3196329,"width":0.018450798,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Checkout source","depth":14,"bounds":{"left":0.5731383,"top":0.3196329,"width":0.03274601,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Trigger event","depth":14,"bounds":{"left":0.70611703,"top":0.3196329,"width":0.025764627,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Start","depth":14,"bounds":{"left":0.8640292,"top":0.3196329,"width":0.009640957,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Duration","depth":14,"bounds":{"left":0.90226066,"top":0.3196329,"width":0.01662234,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actions","depth":14,"bounds":{"left":0.92952126,"top":0.3196329,"width":0.014793883,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":13,"bounds":{"left":0.12283909,"top":0.34796488,"width":0.00831117,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"58490","depth":12,"bounds":{"left":0.12283909,"top":0.3643256,"width":0.014461436,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"58490","depth":13,"bounds":{"left":0.12283909,"top":0.36552274,"width":0.014461436,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.","depth":13,"bounds":{"left":0.27759308,"top":0.3499601,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Status Running Running","depth":12,"bounds":{"left":0.28956118,"top":0.35155627,"width":0.03274601,"height":0.023144454},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Running","depth":13,"bounds":{"left":0.30019948,"top":0.35634476,"width":0.018118352,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23m 23s","depth":13,"bounds":{"left":0.28956118,"top":0.38028732,"width":0.019281914,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"remain","depth":13,"bounds":{"left":0.30884308,"top":0.38028732,"width":0.016123671,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Info Outline","depth":12,"bounds":{"left":0.32563165,"top":0.37470073,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"build_accept_deploy","depth":12,"bounds":{"left":0.3444149,"top":0.35514766,"width":0.045545213,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":13,"bounds":{"left":0.3444149,"top":0.35594574,"width":0.045545213,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20808-low-priority-indexing-queue","depth":13,"bounds":{"left":0.5728058,"top":0.34836394,"width":0.08726729,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20808-low-priority-indexing-queue","depth":14,"bounds":{"left":0.5728058,"top":0.349162,"width":0.08726729,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":14,"bounds":{"left":0.5728058,"top":0.36711892,"width":0.12765957,"height":0.033519555},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"d94a285","depth":16,"bounds":{"left":0.5728058,"top":0.36871508,"width":0.020279255,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge branch 'master' into JY-20808-low-priority-indexing-queue","depth":16,"bounds":{"left":0.5728058,"top":0.36871508,"width":0.11635638,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Push","depth":13,"bounds":{"left":0.7190825,"top":0.35594574,"width":0.011303191,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit pushed","depth":14,"bounds":{"left":0.73171544,"top":0.35594574,"width":0.034574468,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":13,"bounds":{"left":0.8515625,"top":0.34836394,"width":0.027094414,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m ago","depth":15,"bounds":{"left":0.8572141,"top":0.3575419,"width":0.015791224,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp duration to clipboard","depth":13,"bounds":{"left":0.8962766,"top":0.34836394,"width":0.027593086,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from start","depth":12,"bounds":{"left":0.92918885,"top":0.35155627,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from failed","depth":12,"bounds":{"left":0.93982714,"top":0.35155627,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Cancel workflow","depth":12,"bounds":{"left":0.95046544,"top":0.35155627,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix workflow","depth":12,"bounds":{"left":0.96110374,"top":0.35155627,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More Actions","depth":12,"bounds":{"left":0.97174203,"top":0.35155627,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Jobs","depth":14,"bounds":{"left":0.26080453,"top":0.42657623,"width":0.010804521,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RUNNING job checkout-code","depth":14,"bounds":{"left":0.28756648,"top":0.42418197,"width":0.41805187,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"checkout-code","depth":15,"bounds":{"left":0.30285904,"top":0.42657623,"width":0.03374335,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888485","depth":16,"bounds":{"left":0.33926198,"top":0.42657623,"width":0.017287234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1m 21s","depth":14,"bounds":{"left":0.9030917,"top":0.42418197,"width":0.015458777,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m 21s","depth":15,"bounds":{"left":0.9030917,"top":0.42657623,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"build-frontend","depth":15,"bounds":{"left":0.30285904,"top":0.4521149,"width":0.03158245,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888486","depth":16,"bounds":{"left":0.33710107,"top":0.4521149,"width":0.017453458,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test-frontend","depth":15,"bounds":{"left":0.30285904,"top":0.47765362,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888487","depth":16,"bounds":{"left":0.33494017,"top":0.47765362,"width":0.017121011,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"build-backend","depth":15,"bounds":{"left":0.30285904,"top":0.50319237,"width":0.03158245,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888488","depth":16,"bounds":{"left":0.33710107,"top":0.50319237,"width":0.017453458,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"phpstan","depth":15,"bounds":{"left":0.30285904,"top":0.52873105,"width":0.017785905,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888492","depth":16,"bounds":{"left":0.32330453,"top":0.52873105,"width":0.017453458,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setup","depth":15,"bounds":{"left":0.30285904,"top":0.55426973,"width":0.012300532,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888490","depth":16,"bounds":{"left":0.31781915,"top":0.55426973,"width":0.017453458,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test","depth":15,"bounds":{"left":0.30285904,"top":0.5798085,"width":0.008477394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888491","depth":16,"bounds":{"left":0.31399602,"top":0.5798085,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test-backend-lint","depth":15,"bounds":{"left":0.30285904,"top":0.60534716,"width":0.038231384,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888489","depth":16,"bounds":{"left":0.34375,"top":0.60534716,"width":0.017287234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sonar_cloud","depth":15,"bounds":{"left":0.30285904,"top":0.6308859,"width":0.02642952,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888493","depth":16,"bounds":{"left":0.33194813,"top":0.6308859,"width":0.017453458,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"SUCCESS workflow setup-workflow. Collapse the workflow jobs list.","depth":13,"bounds":{"left":0.27759308,"top":0.6715882,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Status Passed Success","depth":12,"bounds":{"left":0.28956118,"top":0.67318434,"width":0.033410903,"height":0.022745412},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Success","depth":13,"bounds":{"left":0.30019948,"top":0.6775738,"width":0.018783245,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"setup-workflow","depth":12,"bounds":{"left":0.3444149,"top":0.6763767,"width":0.03507314,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"setup-workflow","depth":13,"bounds":{"left":0.3444149,"top":0.6771748,"width":0.03507314,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SETUP","depth":12,"bounds":{"left":0.38480717,"top":0.67917,"width":0.011136968,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20808-low-priority-indexing-queue","depth":13,"bounds":{"left":0.5728058,"top":0.669992,"width":0.08726729,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20808-low-priority-indexing-queue","depth":14,"bounds":{"left":0.5728058,"top":0.6707901,"width":0.08726729,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":14,"bounds":{"left":0.5728058,"top":0.688747,"width":0.12765957,"height":0.033519555},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"d94a285","depth":16,"bounds":{"left":0.5728058,"top":0.6903432,"width":0.020279255,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge branch 'master' into JY-20808-low-priority-indexing-queue","depth":16,"bounds":{"left":0.5728058,"top":0.6903432,"width":0.11635638,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Push","depth":13,"bounds":{"left":0.7190825,"top":0.6771748,"width":0.011303191,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit pushed","depth":14,"bounds":{"left":0.73171544,"top":0.6771748,"width":0.034574468,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":13,"bounds":{"left":0.8508976,"top":0.669992,"width":0.027759308,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2m ago","depth":15,"bounds":{"left":0.8565492,"top":0.67877096,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp duration to clipboard","depth":13,"bounds":{"left":0.90458775,"top":0.669992,"width":0.019281914,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from start","depth":12,"bounds":{"left":0.92918885,"top":0.67318434,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from failed","depth":12,"bounds":{"left":0.93982714,"top":0.67318434,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Cancel workflow","depth":12,"bounds":{"left":0.95046544,"top":0.67318434,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix workflow","depth":12,"bounds":{"left":0.96110374,"top":0.67318434,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More Actions","depth":12,"bounds":{"left":0.97174203,"top":0.67318434,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Jobs","depth":14,"bounds":{"left":0.26080453,"top":0.74740624,"width":0.010804521,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SUCCESS job setup","depth":14,"bounds":{"left":0.28756648,"top":0.74461293,"width":0.41805187,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"setup","depth":15,"bounds":{"left":0.30285904,"top":0.74740624,"width":0.012632979,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888475","depth":16,"bounds":{"left":0.3181516,"top":0.74740624,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"56s","depth":14,"bounds":{"left":0.91007316,"top":0.74461293,"width":0.008477394,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"56s","depth":15,"bounds":{"left":0.91007316,"top":0.74740624,"width":0.008477394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":13,"bounds":{"left":0.12283909,"top":0.79688746,"width":0.00831117,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"58489","depth":12,"bounds":{"left":0.12283909,"top":0.8132482,"width":0.014461436,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"58489","depth":13,"bounds":{"left":0.12283909,"top":0.81404626,"width":0.014461436,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.","depth":13,"bounds":{"left":0.27759308,"top":0.79888266,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Status Running Running","depth":12,"bounds":{"left":0.28956118,"top":0.8004789,"width":0.03274601,"height":0.023144454},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Running","depth":13,"bounds":{"left":0.30019948,"top":0.80486834,"width":0.018118352,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22m 47s","depth":13,"bounds":{"left":0.28956118,"top":0.8292099,"width":0.018783245,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"remain","depth":13,"bounds":{"left":0.30834442,"top":0.8292099,"width":0.016289894,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Info Outline","depth":12,"bounds":{"left":0.3252992,"top":0.8236233,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"build_accept_deploy","depth":12,"bounds":{"left":0.3444149,"top":0.8036712,"width":0.045545213,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":13,"bounds":{"left":0.3444149,"top":0.80486834,"width":0.045545213,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20893-chunk-control-per-update-target","depth":13,"bounds":{"left":0.5728058,"top":0.7972865,"width":0.09840426,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20893-chunk-control-per-update-target","depth":14,"bounds":{"left":0.5728058,"top":0.7980846,"width":0.09840426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":14,"bounds":{"left":0.5728058,"top":0.8160415,"width":0.12765957,"height":0.033519555},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"fb4a7f6","depth":16,"bounds":{"left":0.5728058,"top":0.8176377,"width":0.01761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge branch 'master' into JY-20893-chunk-control-per-update-target","depth":16,"bounds":{"left":0.5728058,"top":0.8176377,"width":0.11951463,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Push","depth":13,"bounds":{"left":0.7190825,"top":0.80486834,"width":0.011303191,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit pushed","depth":14,"bounds":{"left":0.73171544,"top":0.80486834,"width":0.034574468,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":13,"bounds":{"left":0.8515625,"top":0.7972865,"width":0.027094414,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m ago","depth":15,"bounds":{"left":0.8572141,"top":0.8064645,"width":0.015791224,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp duration to clipboard","depth":13,"bounds":{"left":0.8962766,"top":0.7972865,"width":0.027593086,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from start","depth":12,"bounds":{"left":0.92918885,"top":0.8004789,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from failed","depth":12,"bounds":{"left":0.93982714,"top":0.8004789,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Cancel workflow","depth":12,"bounds":{"left":0.95046544,"top":0.8004789,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix workflow","depth":12,"bounds":{"left":0.96110374,"top":0.8004789,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More Actions","depth":12,"bounds":{"left":0.97174203,"top":0.8004789,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Jobs","depth":14,"bounds":{"left":0.26080453,"top":0.87549883,"width":0.010804521,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SUCCESS job checkout-code","depth":14,"bounds":{"left":0.28756648,"top":0.8731046,"width":0.41805187,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"checkout-code","depth":15,"bounds":{"left":0.30285904,"top":0.87549883,"width":0.03374335,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888476","depth":16,"bounds":{"left":0.33926198,"top":0.87549883,"width":0.017121011,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1m 18s","depth":14,"bounds":{"left":0.90292555,"top":0.8731046,"width":0.015625,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m 18s","depth":15,"bounds":{"left":0.90292555,"top":0.87549883,"width":0.015625,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RUNNING job build-frontend","depth":14,"bounds":{"left":0.28756648,"top":0.89864326,"width":0.41805187,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build-frontend","depth":15,"bounds":{"left":0.30285904,"top":0.9010375,"width":0.032247342,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888477","depth":16,"bounds":{"left":0.33776596,"top":0.9010375,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"37s","depth":14,"bounds":{"left":0.9104056,"top":0.89864326,"width":0.008144947,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"37s","depth":15,"bounds":{"left":0.9104056,"top":0.9010375,"width":0.008144947,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test-frontend","depth":15,"bounds":{"left":0.30285904,"top":0.9265762,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888478","depth":16,"bounds":{"left":0.33494017,"top":0.9265762,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RUNNING job build-backend","depth":14,"bounds":{"left":0.28756648,"top":0.9497207,"width":0.41805187,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build-backend","depth":15,"bounds":{"left":0.30285904,"top":0.95211494,"width":0.032081116,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888479","depth":16,"bounds":{"left":0.33759972,"top":0.95211494,"width":0.017121011,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"36s","depth":14,"bounds":{"left":0.9099069,"top":0.9497207,"width":0.008643617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"36s","depth":15,"bounds":{"left":0.9099069,"top":0.95211494,"width":0.008643617,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"phpstan","depth":15,"bounds":{"left":0.30285904,"top":0.9776536,"width":0.017785905,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888483","depth":16,"bounds":{"left":0.32330453,"top":0.9776536,"width":0.017453458,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setup","depth":15,"bounds":{"left":0.30285904,"top":1.0,"width":0.012300532,"height":-0.0031923056},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888481","depth":16,"bounds":{"left":0.31781915,"top":1.0,"width":0.01662234,"height":-0.0031923056},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test","depth":15,"bounds":{"left":0.30285904,"top":1.0,"width":0.008477394,"height":-0.028730989},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888482","depth":16,"bounds":{"left":0.31399602,"top":1.0,"width":0.017287234,"height":-0.028730989},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test-backend-lint","depth":15,"bounds":{"left":0.30285904,"top":1.0,"width":0.038231384,"height":-0.05426979},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888480","depth":16,"bounds":{"left":0.34375,"top":1.0,"width":0.017287234,"height":-0.05426979},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sonar_cloud","depth":15,"bounds":{"left":0.30285904,"top":1.0,"width":0.02642952,"height":-0.07980847},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888484","depth":16,"bounds":{"left":0.33194813,"top":1.0,"width":0.017453458,"height":-0.07980847},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"SUCCESS workflow setup-workflow. Collapse the workflow jobs list.","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Status Passed Success","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Success","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"setup-workflow","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"setup-workflow","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SETUP","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20893-chunk-control-per-update-target","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20893-chunk-control-per-update-target","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"fb4a7f6","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge branch 'master' into JY-20893-chunk-control-per-update-target","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Push","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit pushed","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2m ago","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp duration to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from start","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from failed","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Cancel workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More Actions","depth":12,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Jobs","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SUCCESS job setup","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888474","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"37s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"37s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"58488","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"58488","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Status Running Running","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Running","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12m 24s","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"remain","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Info Outline","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"build_accept_deploy","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20920-fix-participant-matcher","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20920-fix-participant-matcher","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"eb6cfc4","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JY-20920: Fix participant matcher","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Push","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit pushed","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-620271103423449343
|
-8284533550702758255
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
Project Outline app
app
app
app
Overview
Overview
Settings
Settings
Deploys
Deploys
Lightning Manage triggers
Manage triggers
Trigger Pipeline
Pipelines All pipelines my-pipelines-filter
All pipelines
app Project Filter. Selected "app"
app
All branches Branch Filter. Selected "All branches"
All branches
Start Time Cutoff date Arrow Drop Down
Cutoff date
All statuses Arrow Drop Down
All
statuses
Filter Display options
Display options
Pipeline
Status
Workflow
Checkout source
Trigger event
Start
Duration
Actions
app
58490
58490
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
23m 23s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Open commit on version control site
d94a285
Merge branch 'master' into JY-20808-low-priority-indexing-queue
Push
Commit pushed
Copy timestamp to clipboard
1m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
RUNNING job checkout-code
checkout-code
888485
1m 21s
1m 21s
build-frontend
888486
test-frontend
888487
build-backend
888488
phpstan
888492
setup
888490
test
888491
test-backend-lint
888489
sonar_cloud
888493
SUCCESS workflow setup-workflow. Collapse the workflow jobs list.
Status Passed Success
Success
setup-workflow
setup-workflow
SETUP
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Open commit on version control site
d94a285
Merge branch 'master' into JY-20808-low-priority-indexing-queue
Push
Commit pushed
Copy timestamp to clipboard
2m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job setup
setup
888475
56s
56s
app
58489
58489
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
22m 47s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20893-chunk-control-per-update-target
JY-20893-chunk-control-per-update-target
Open commit on version control site
fb4a7f6
Merge branch 'master' into JY-20893-chunk-control-per-update-target
Push
Commit pushed
Copy timestamp to clipboard
1m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job checkout-code
checkout-code
888476
1m 18s
1m 18s
RUNNING job build-frontend
build-frontend
888477
37s
37s
test-frontend
888478
RUNNING job build-backend
build-backend
888479
36s
36s
phpstan
888483
setup
888481
test
888482
test-backend-lint
888480
sonar_cloud
888484
SUCCESS workflow setup-workflow. Collapse the workflow jobs list.
Status Passed Success
Success
setup-workflow
setup-workflow
SETUP
JY-20893-chunk-control-per-update-target
JY-20893-chunk-control-per-update-target
Open commit on version control site
fb4a7f6
Merge branch 'master' into JY-20893-chunk-control-per-update-target
Push
Commit pushed
Copy timestamp to clipboard
2m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job setup
setup
888474
37s
37s
app
58488
58488
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
12m 24s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20920-fix-participant-matcher
JY-20920-fix-participant-matcher
Open commit on version control site
eb6cfc4
JY-20920: Fix participant matcher
Push
Commit pushed...
|
51625
|
NULL
|
NULL
|
NULL
|
|
51627
|
1813
|
3
|
2026-05-18T08:51:32.819012+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094292819_m1.jpg...
|
Firefox
|
JY-20613 support owner role on setup team by LakyL JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12092
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Close tab
Pipelines - jiminny/app
Pipelines - jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to content","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":11,"on_screen":true,"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,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":10,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":10,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":10,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":10,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-1995707625085823033
|
3622264160708874383
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Close tab
Pipelines - jiminny/app
Pipelines - jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51628
|
1814
|
4
|
2026-05-18T08:51:32.819033+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094292819_m2.jpg...
|
Firefox
|
JY-20613 support owner role on setup team by LakyL JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12092
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Close tab
Pipelines - jiminny/app
Pipelines - jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (30)
Pull requests
(
30
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality
Security and quality
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
Allow owner's role to be selected when setting up a trial #12092 Edit title
Allow owner's role to be selected when setting up a trial
#
12092
Edit title
Checks pending
Checks pending
Code
Code
Open
LakyLak...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.042719416,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1590758,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.15722266,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.21707901,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to content","depth":7,"bounds":{"left":0.07962101,"top":0.0518755,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"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.07962101,"top":0.05347167,"width":0.0029920214,"height":0.21468475},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":11,"bounds":{"left":0.08494016,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":10,"bounds":{"left":0.099567816,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.112865694,"top":0.06464485,"width":0.018949468,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":15,"bounds":{"left":0.11486037,"top":0.07063048,"width":0.014960106,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":13,"bounds":{"left":0.13680187,"top":0.06464485,"width":0.017785905,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":15,"bounds":{"left":0.13879654,"top":0.07063048,"width":0.008477394,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":10,"bounds":{"left":0.81698805,"top":0.06464485,"width":0.06565824,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":13,"bounds":{"left":0.82928854,"top":0.07063048,"width":0.011801862,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":13,"bounds":{"left":0.8424202,"top":0.07222666,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":13,"bounds":{"left":0.84640956,"top":0.07063048,"width":0.021276595,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":11,"bounds":{"left":0.88464093,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.8949468,"top":0.06464485,"width":0.008643617,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":10,"bounds":{"left":0.9115692,"top":0.06464485,"width":0.01662234,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":10,"bounds":{"left":0.93085104,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":10,"bounds":{"left":0.94414896,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":10,"bounds":{"left":0.9574468,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.97074467,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.9840425,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":10,"bounds":{"left":0.079288565,"top":0.051077414,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":11,"bounds":{"left":0.079288565,"top":0.05387071,"width":0.0787899,"height":0.023144454},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":13,"bounds":{"left":0.08494016,"top":0.09936153,"width":0.025099734,"height":0.026336791},"on_screen":true,"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.095744684,"top":0.10574621,"width":0.011469414,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (30)","depth":13,"bounds":{"left":0.11269947,"top":0.09936153,"width":0.05518617,"height":0.026336791},"on_screen":true,"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.12333777,"top":0.10574621,"width":0.02925532,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":15,"bounds":{"left":0.15525267,"top":0.113727055,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"30","depth":15,"bounds":{"left":0.15824468,"top":0.113727055,"width":0.005817819,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":15,"bounds":{"left":0.1640625,"top":0.113727055,"width":0.0016622341,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":13,"bounds":{"left":0.1705452,"top":0.09936153,"width":0.029089095,"height":0.026336791},"on_screen":true,"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.18151596,"top":0.10574621,"width":0.014960106,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":13,"bounds":{"left":0.20229389,"top":0.09936153,"width":0.03025266,"height":0.026336791},"on_screen":true,"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.21343085,"top":0.10574621,"width":0.015957447,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":13,"bounds":{"left":0.23520611,"top":0.09936153,"width":0.022938829,"height":0.026336791},"on_screen":true,"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.24601063,"top":0.10574621,"width":0.009142287,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security and quality","depth":13,"bounds":{"left":0.26080453,"top":0.09936153,"width":0.05817819,"height":0.026336791},"on_screen":true,"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.27260637,"top":0.10574621,"width":0.04255319,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":13,"bounds":{"left":0.32164228,"top":0.09936153,"width":0.03125,"height":0.026336791},"on_screen":true,"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.33277926,"top":0.10574621,"width":0.016788565,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":13,"bounds":{"left":0.35555187,"top":0.09936153,"width":0.032081116,"height":0.026336791},"on_screen":true,"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.36668882,"top":0.10574621,"width":0.01761968,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Important update","depth":11,"bounds":{"left":0.09325133,"top":0.14365523,"width":0.0003324468,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Important update","depth":12,"bounds":{"left":0.09325133,"top":0.1452514,"width":0.039228722,"height":0.013567438},"on_screen":true,"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.09325133,"top":0.1452514,"width":0.2159242,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Review this update","depth":11,"bounds":{"left":0.30917552,"top":0.1452514,"width":0.04055851,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Review this update","depth":12,"bounds":{"left":0.30917552,"top":0.1452514,"width":0.04055851,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and manage your preferences in your","depth":11,"bounds":{"left":0.34973404,"top":0.1452514,"width":0.08261303,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GitHub account settings","depth":11,"bounds":{"left":0.4323471,"top":0.1452514,"width":0.05219415,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub account settings","depth":12,"bounds":{"left":0.4323471,"top":0.1452514,"width":0.05219415,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":11,"bounds":{"left":0.48454124,"top":0.1452514,"width":0.0013297872,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dismiss banner","depth":10,"bounds":{"left":0.98636967,"top":0.13886672,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Allow owner's role to be selected when setting up a trial #12092 Edit title","depth":13,"bounds":{"left":0.33776596,"top":0.19193934,"width":0.30053192,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial","depth":14,"bounds":{"left":0.33776596,"top":0.19273743,"width":0.24950133,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":15,"bounds":{"left":0.58992684,"top":0.19273743,"width":0.006482713,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12092","depth":15,"bounds":{"left":0.59640956,"top":0.19273743,"width":0.029920213,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit title","depth":14,"bounds":{"left":0.62765956,"top":0.19513169,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Checks pending","depth":13,"bounds":{"left":0.6590758,"top":0.19832402,"width":0.052027926,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks pending","depth":15,"bounds":{"left":0.67137635,"top":0.20430966,"width":0.035405584,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Code","depth":13,"bounds":{"left":0.7137633,"top":0.19832402,"width":0.02825798,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":15,"bounds":{"left":0.7180851,"top":0.20430966,"width":0.011635638,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":13,"bounds":{"left":0.34840426,"top":0.23623304,"width":0.011968086,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":15,"bounds":{"left":0.36702126,"top":0.2330407,"width":0.018450798,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-4324674851568130615
|
-1133678745355401827
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Close tab
Pipelines - jiminny/app
Pipelines - jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (30)
Pull requests
(
30
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality
Security and quality
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
Allow owner's role to be selected when setting up a trial #12092 Edit title
Allow owner's role to be selected when setting up a trial
#
12092
Edit title
Checks pending
Checks pending
Code
Code
Open
LakyLak...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51629
|
1814
|
5
|
2026-05-18T08:51:33.816311+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094293816_m2.jpg...
|
Firefox
|
JY-20613 support owner role on setup team by LakyL JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12092
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Close tab
Pipelines - jiminny/app
Pipelines - jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (30)
Pull requests
(
30
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality
Security and quality
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
Allow owner's role to be selected when setting up a trial #12092 Edit title
Allow owner's role to be selected when setting up a trial
#
12092
Edit title
Checks pending
Checks pending
Code
Code
Open
LakyLak
LakyLak
wants to merge 1 commit into
master
master
from
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
Copy head branch name to clipboard
Lines changed: 12 additions & 1 deletion
Conversation (0)
Conversation
(
0
)
Commits (1)
Commits
(
1
)
Checks (2)
Checks
(
2
)
Files changed (3)
Files changed
(
3
)
Conversation
Conversation
@LakyLak
Show options
LakyLak commented 3 minutes ago
LakyLak
LakyLak
commented
3 minutes ago
3 minutes ago
JIRA: JY-20613
JIRA:
JY-20613
JY-20613
Changes:
Changes:
Add support for owner role
Add or remove reactions
@LakyLak
JY-20613
JY-20613
support owner role on setup team
support owner role on setup team
8 / 10 checks OK
6fae8bb
6fae8bb
@nikolay-yankov
nikolay-yankov
nikolay-yankov
changed the title
JY-20613 support owner role on setup team
Allow owner's role to be selected when setting up a trial
2 minutes ago
2 minutes ago
This branch has not been deployed
This branch has not been deployed
No deployments
Merge info
Merge info
Review required
Review required
At least 1 approving review is required by reviewers with write access.
Some checks were not successful
Some checks were not successful
2 failing, 1 expected, 8 successful checks
Collapse checks
Collapse 2 failing checks group
2 failing checks
Checks settings
failing checks
failing checks
build_accept_deploy
build_accept_deploy
build_accept_deploy
Failing after 12m
— Workflow: build_accept_deploy
More actions
ci/circleci: test
ci/circleci: test
ci/circleci: test
— Your tests failed on CircleCI
More actions
Collapse 1 pending check group
1 pending check
pending checks
pending checks
SonarCloud Code Analysis
SonarCloud Code Analysis
Expected
— Waiting for status to be reported
Required
Collapse 8 successful checks group
8 successful checks
successful checks
successful checks
ci/circleci: build-backend
ci/circleci: build-backend
ci/circleci: build-backend
— Your tests passed on CircleCI!
More actions
ci/circleci: build-frontend
ci/circleci: build-frontend
ci/circleci: build-frontend
— Your tests passed on CircleCI!
More actions
ci/circleci: checkout-code
ci/circleci: checkout-code
ci/circleci: checkout-code
— Your tests passed on CircleCI!
More actions
ci/circleci: phpstan
ci/circleci: phpstan
ci/circleci: phpstan
— Your tests passed on CircleCI!
More actions
ci/circleci: setup
ci/circleci: setup
ci/circleci: setup
— Your tests passed on CircleCI!
More actions
ci/circleci: test-backend-lint
ci/circleci: test-backend-lint
ci/circleci: test-backend-lint
— Your tests passed on CircleCI!
More actions
ci/circleci: test-frontend
ci/circleci: test-frontend
ci/circleci: test-frontend
— Your tests passed on CircleCI!
More actions
setup-workflow
setup-workflow
setup-workflow
Successful in 34s
— Workflow: setup-workflow
More actions
This branch is out-of-date with the base branch
This branch is out-of-date with the base branch
Merge the latest changes from master into this branch. This merge commit will be associated with LakyLak.
Update branch
Update branch
Update branch options
Merging is blocked
Merging is blocked
At least 1 approving review is required by reviewers with write access.
Enable auto-merge
Enable auto-merge
Select merge method
You can also merge this with the command line.
View command line instructions.
Still in progress?
Convert to draft
Convert to draft
@LakyLak
Add a comment
Add a comment
Comment
Write
Write
Preview
Preview
Comment
Markdown is supported
Markdown
is supported
Paste, drop, or click to add files
Paste, drop, or click to add files
Close pull request
Close pull request
Comment
Remember, contributions to this repository should follow our
GitHub Community Guidelines
GitHub Community Guidelines
.
ProTip!
Add comments to specific lines under
Files changed
Files changed
.
Reviewers
Suggestions
Request
Request
@ivhristova
ivhristova
ivhristova
Request
Request
@mihailmihaylovjiminny
mihailmihaylovjiminny
mihailmihaylovjiminny
At least 1 approving review is required to merge this pull request.
Still in progress?
Convert to draft
Assignees
No one—
assign yourself
Labels
None yet
Projects
None yet
Milestone
No milestone
Development
Development
Successfully merging this pull request may close these issues.
None yet
Notifications Customize
Notifications
Customize
Unsubscribe
Unsubscribe
You’re receiving notifications because you’re watching this repository.
1 participant
1 participant
@LakyLak...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.042719416,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1590758,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.15722266,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.21707901,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to content","depth":7,"bounds":{"left":0.07962101,"top":0.0518755,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"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.07962101,"top":0.05347167,"width":0.0029920214,"height":0.21468475},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":11,"bounds":{"left":0.08494016,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":10,"bounds":{"left":0.099567816,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.112865694,"top":0.06464485,"width":0.018949468,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":15,"bounds":{"left":0.11486037,"top":0.07063048,"width":0.014960106,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":13,"bounds":{"left":0.13680187,"top":0.06464485,"width":0.017785905,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":15,"bounds":{"left":0.13879654,"top":0.07063048,"width":0.008477394,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":10,"bounds":{"left":0.81698805,"top":0.06464485,"width":0.06565824,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":13,"bounds":{"left":0.82928854,"top":0.07063048,"width":0.011801862,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":13,"bounds":{"left":0.8424202,"top":0.07222666,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":13,"bounds":{"left":0.84640956,"top":0.07063048,"width":0.021276595,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":11,"bounds":{"left":0.88464093,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.8949468,"top":0.06464485,"width":0.008643617,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":10,"bounds":{"left":0.9115692,"top":0.06464485,"width":0.01662234,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":10,"bounds":{"left":0.93085104,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":10,"bounds":{"left":0.94414896,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":10,"bounds":{"left":0.9574468,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.97074467,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.9840425,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":10,"bounds":{"left":0.079288565,"top":0.051077414,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":11,"bounds":{"left":0.079288565,"top":0.05387071,"width":0.0787899,"height":0.023144454},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":13,"bounds":{"left":0.08494016,"top":0.09936153,"width":0.025099734,"height":0.026336791},"on_screen":true,"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.095744684,"top":0.10574621,"width":0.011469414,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (30)","depth":13,"bounds":{"left":0.11269947,"top":0.09936153,"width":0.05518617,"height":0.026336791},"on_screen":true,"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.12333777,"top":0.10574621,"width":0.02925532,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":15,"bounds":{"left":0.15525267,"top":0.113727055,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"30","depth":15,"bounds":{"left":0.15824468,"top":0.113727055,"width":0.005817819,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":15,"bounds":{"left":0.1640625,"top":0.113727055,"width":0.0016622341,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":13,"bounds":{"left":0.1705452,"top":0.09936153,"width":0.029089095,"height":0.026336791},"on_screen":true,"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.18151596,"top":0.10574621,"width":0.014960106,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":13,"bounds":{"left":0.20229389,"top":0.09936153,"width":0.03025266,"height":0.026336791},"on_screen":true,"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.21343085,"top":0.10574621,"width":0.015957447,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":13,"bounds":{"left":0.23520611,"top":0.09936153,"width":0.022938829,"height":0.026336791},"on_screen":true,"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.24601063,"top":0.10574621,"width":0.009142287,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security and quality","depth":13,"bounds":{"left":0.26080453,"top":0.09936153,"width":0.05817819,"height":0.026336791},"on_screen":true,"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.27260637,"top":0.10574621,"width":0.04255319,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":13,"bounds":{"left":0.32164228,"top":0.09936153,"width":0.03125,"height":0.026336791},"on_screen":true,"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.33277926,"top":0.10574621,"width":0.016788565,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":13,"bounds":{"left":0.35555187,"top":0.09936153,"width":0.032081116,"height":0.026336791},"on_screen":true,"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.36668882,"top":0.10574621,"width":0.01761968,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Important update","depth":11,"bounds":{"left":0.09325133,"top":0.14365523,"width":0.0003324468,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Important update","depth":12,"bounds":{"left":0.09325133,"top":0.1452514,"width":0.039228722,"height":0.013567438},"on_screen":true,"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.09325133,"top":0.1452514,"width":0.2159242,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Review this update","depth":11,"bounds":{"left":0.30917552,"top":0.1452514,"width":0.04055851,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Review this update","depth":12,"bounds":{"left":0.30917552,"top":0.1452514,"width":0.04055851,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and manage your preferences in your","depth":11,"bounds":{"left":0.34973404,"top":0.1452514,"width":0.08261303,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GitHub account settings","depth":11,"bounds":{"left":0.4323471,"top":0.1452514,"width":0.05219415,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub account settings","depth":12,"bounds":{"left":0.4323471,"top":0.1452514,"width":0.05219415,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":11,"bounds":{"left":0.48454124,"top":0.1452514,"width":0.0013297872,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dismiss banner","depth":10,"bounds":{"left":0.98636967,"top":0.13886672,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Allow owner's role to be selected when setting up a trial #12092 Edit title","depth":13,"bounds":{"left":0.33776596,"top":0.19193934,"width":0.30053192,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial","depth":14,"bounds":{"left":0.33776596,"top":0.19273743,"width":0.24950133,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":15,"bounds":{"left":0.58992684,"top":0.19273743,"width":0.006482713,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12092","depth":15,"bounds":{"left":0.59640956,"top":0.19273743,"width":0.029920213,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit title","depth":14,"bounds":{"left":0.62765956,"top":0.19513169,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Checks pending","depth":13,"bounds":{"left":0.6590758,"top":0.19832402,"width":0.052027926,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks pending","depth":15,"bounds":{"left":0.67137635,"top":0.20430966,"width":0.035405584,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Code","depth":13,"bounds":{"left":0.7137633,"top":0.19832402,"width":0.02825798,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":15,"bounds":{"left":0.7180851,"top":0.20430966,"width":0.011635638,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":13,"bounds":{"left":0.34840426,"top":0.23623304,"width":0.011968086,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":15,"bounds":{"left":0.36702126,"top":0.2330407,"width":0.018450798,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":16,"bounds":{"left":0.36702126,"top":0.23463687,"width":0.018450798,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 1 commit into","depth":15,"bounds":{"left":0.38680187,"top":0.23463687,"width":0.06349734,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":15,"bounds":{"left":0.45162898,"top":0.23264167,"width":0.018284574,"height":0.017557861},"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":16,"bounds":{"left":0.45362368,"top":0.235834,"width":0.014295213,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":16,"bounds":{"left":0.47124335,"top":0.23463687,"width":0.009973404,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20613-allow-owner-role-on-team-setup","depth":16,"bounds":{"left":0.48254654,"top":0.23264167,"width":0.09757314,"height":0.017557861},"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":17,"bounds":{"left":0.48454124,"top":0.235834,"width":0.09358378,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":16,"bounds":{"left":0.58144945,"top":0.23024741,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 12 additions & 1 deletion","depth":14,"bounds":{"left":0.71326464,"top":0.28651237,"width":0.019946808,"height":0.11412609},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Conversation (0)","depth":16,"bounds":{"left":0.33776596,"top":0.26855546,"width":0.0546875,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Conversation","depth":17,"bounds":{"left":0.35006648,"top":0.27813247,"width":0.028091755,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.38813165,"top":0.27813247,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.39112368,"top":0.27813247,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.3941157,"top":0.27813247,"width":0.0016622341,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Commits (1)","depth":16,"bounds":{"left":0.39245346,"top":0.26855546,"width":0.04504654,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Commits","depth":17,"bounds":{"left":0.40475398,"top":0.27813247,"width":0.019115692,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.4331782,"top":0.27813247,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":18,"bounds":{"left":0.43617022,"top":0.27813247,"width":0.0021609042,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.43833113,"top":0.27813247,"width":0.0016622341,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Checks (2)","depth":16,"bounds":{"left":0.4375,"top":0.26855546,"width":0.042386968,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks","depth":17,"bounds":{"left":0.44980052,"top":0.27813247,"width":0.015957447,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.47556517,"top":0.27813247,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":18,"bounds":{"left":0.47855717,"top":0.27813247,"width":0.0026595744,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.48121676,"top":0.27813247,"width":0.0018284575,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Files changed (3)","depth":16,"bounds":{"left":0.47988698,"top":0.26855546,"width":0.056349736,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Files changed","depth":17,"bounds":{"left":0.4921875,"top":0.27813247,"width":0.029753989,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.5319149,"top":0.27813247,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":18,"bounds":{"left":0.5349069,"top":0.27813247,"width":0.0028257978,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.5377327,"top":0.27813247,"width":0.0016622341,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Conversation","depth":12,"bounds":{"left":0.33776596,"top":0.3140463,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation","depth":13,"bounds":{"left":0.33776596,"top":0.31683958,"width":0.048204787,"height":0.023144454},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"bounds":{"left":0.33776596,"top":0.3140463,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show options","depth":15,"bounds":{"left":0.61136967,"top":0.31484437,"width":0.007978723,"height":0.02952913},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"LakyLak commented 3 minutes ago","depth":14,"bounds":{"left":0.3620346,"top":0.31484437,"width":0.24135639,"height":0.02952913},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":16,"bounds":{"left":0.3620346,"top":0.32282522,"width":0.018450798,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":17,"bounds":{"left":0.3620346,"top":0.32282522,"width":0.018450798,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"commented","depth":15,"bounds":{"left":0.38181517,"top":0.32282522,"width":0.025598405,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"3 minutes ago","depth":15,"bounds":{"left":0.40874335,"top":0.32122904,"width":0.030585106,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3 minutes ago","depth":17,"bounds":{"left":0.40874335,"top":0.32282522,"width":0.030585106,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JIRA: JY-20613","depth":16,"bounds":{"left":0.3620346,"top":0.35794094,"width":0.25731382,"height":0.017557861},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JIRA:","depth":17,"bounds":{"left":0.3620346,"top":0.35834,"width":0.015791224,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20613","depth":17,"bounds":{"left":0.3778258,"top":0.35834,"width":0.026761968,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613","depth":18,"bounds":{"left":0.3778258,"top":0.35834,"width":0.026761968,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Changes:","depth":16,"bounds":{"left":0.3620346,"top":0.39465284,"width":0.25731382,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changes:","depth":17,"bounds":{"left":0.3620346,"top":0.39465284,"width":0.021110373,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Add support for owner role","depth":18,"bounds":{"left":0.3700133,"top":0.42298484,"width":0.057679523,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add or remove reactions","depth":16,"bounds":{"left":0.3620346,"top":0.4509178,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"@LakyLak","depth":12,"bounds":{"left":0.3700133,"top":0.51476455,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"JY-20613","depth":14,"bounds":{"left":0.37865692,"top":0.51835597,"width":0.019115692,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613","depth":15,"bounds":{"left":0.37865692,"top":0.51835597,"width":0.019115692,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"support owner role on setup team","depth":14,"bounds":{"left":0.40009972,"top":0.51835597,"width":0.07679521,"height":0.011572227},"on_screen":true,"help_text":"JY-20613 support owner role on setup team","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"support owner role on setup team","depth":15,"bounds":{"left":0.40009972,"top":0.51835597,"width":0.07679521,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"8 / 10 checks OK","depth":13,"bounds":{"left":0.60139626,"top":0.51476455,"width":0.005319149,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"6fae8bb","depth":14,"bounds":{"left":0.6080452,"top":0.51835597,"width":0.016954787,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6fae8bb","depth":15,"bounds":{"left":0.6080452,"top":0.51835597,"width":0.016954787,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@nikolay-yankov","depth":14,"bounds":{"left":0.3700133,"top":0.565842,"width":0.0066489363,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"nikolay-yankov","depth":14,"bounds":{"left":0.3778258,"top":0.5674381,"width":0.03374335,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"nikolay-yankov","depth":15,"bounds":{"left":0.3778258,"top":0.5674381,"width":0.03374335,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"changed the title","depth":14,"bounds":{"left":0.41156915,"top":0.5674381,"width":0.038896278,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team","depth":15,"bounds":{"left":0.4504654,"top":0.5674381,"width":0.09906915,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial","depth":15,"bounds":{"left":0.3700133,"top":0.5674381,"width":0.23470744,"height":0.03152434},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"2 minutes ago","depth":14,"bounds":{"left":0.44165558,"top":0.58539504,"width":0.030418882,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2 minutes ago","depth":16,"bounds":{"left":0.44165558,"top":0.58539504,"width":0.030418882,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"This branch has not been deployed","depth":14,"bounds":{"left":0.375,"top":0.641261,"width":0.2443484,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This branch has not been deployed","depth":15,"bounds":{"left":0.375,"top":0.6424581,"width":0.08843085,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No deployments","depth":14,"bounds":{"left":0.375,"top":0.66081405,"width":0.03274601,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Merge info","depth":12,"bounds":{"left":0.35638297,"top":0.7007183,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge info","depth":13,"bounds":{"left":0.35638297,"top":0.7035116,"width":0.023105053,"height":0.0518755},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Review required","depth":13,"bounds":{"left":0.37533244,"top":0.71428573,"width":0.24401596,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Review required","depth":14,"bounds":{"left":0.37533244,"top":0.71628094,"width":0.04055851,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"At least 1 approving review is required by reviewers with write access.","depth":14,"bounds":{"left":0.37533244,"top":0.7350359,"width":0.14960106,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Some checks were not successful","depth":13,"bounds":{"left":0.37533244,"top":0.7765363,"width":0.23337767,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Some checks were not successful","depth":14,"bounds":{"left":0.37533244,"top":0.77853155,"width":0.08543883,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2 failing, 1 expected, 8 successful checks","depth":14,"bounds":{"left":0.37533244,"top":0.7972865,"width":0.08909574,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse checks","depth":13,"bounds":{"left":0.3567154,"top":0.76376694,"width":0.2679521,"height":0.061452515},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Collapse 2 failing checks group","depth":16,"bounds":{"left":0.359375,"top":0.8339984,"width":0.04105718,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"2 failing checks","depth":18,"bounds":{"left":0.36236703,"top":0.83918595,"width":0.029753989,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Checks settings","depth":16,"bounds":{"left":0.60738033,"top":0.8324022,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"failing checks","depth":19,"bounds":{"left":0.359375,"top":0.8579409,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"failing checks","depth":20,"bounds":{"left":0.359375,"top":0.8619314,"width":0.034574468,"height":0.06863528},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"build_accept_deploy","depth":22,"bounds":{"left":0.3806516,"top":0.8651237,"width":0.044714097,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"build_accept_deploy","depth":23,"bounds":{"left":0.3806516,"top":0.8651237,"width":0.044714097,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":24,"bounds":{"left":0.3806516,"top":0.8651237,"width":0.044714097,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Failing after 12m","depth":22,"bounds":{"left":0.42802528,"top":0.8667199,"width":0.030917553,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— Workflow: build_accept_deploy","depth":22,"bounds":{"left":0.46010637,"top":0.8667199,"width":0.06349734,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions","depth":21,"bounds":{"left":0.60738033,"top":0.8595371,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"ci/circleci: test","depth":22,"bounds":{"left":0.3806516,"top":0.89465284,"width":0.031083776,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"ci/circleci: test","depth":23,"bounds":{"left":0.3806516,"top":0.89465284,"width":0.031083776,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ci/circleci: test","depth":24,"bounds":{"left":0.3806516,"top":0.89465284,"width":0.031083776,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— Your tests failed on CircleCI","depth":22,"bounds":{"left":0.41555852,"top":0.896249,"width":0.05651596,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions","depth":21,"bounds":{"left":0.60738033,"top":0.8890662,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse 1 pending check group","depth":16,"bounds":{"left":0.359375,"top":0.9169992,"width":0.042386968,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"1 pending check","depth":18,"bounds":{"left":0.36236703,"top":0.92218673,"width":0.031083776,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"pending checks","depth":19,"bounds":{"left":0.359375,"top":0.9393456,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"pending checks","depth":20,"bounds":{"left":0.359375,"top":0.943336,"width":0.03939495,"height":0.05666399},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"SonarCloud Code Analysis","depth":22,"bounds":{"left":0.3806516,"top":0.9465283,"width":0.05668218,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SonarCloud Code Analysis","depth":23,"bounds":{"left":0.3806516,"top":0.9465283,"width":0.05668218,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Expected","depth":22,"bounds":{"left":0.43999335,"top":0.9481245,"width":0.01761968,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— Waiting for status to be reported","depth":22,"bounds":{"left":0.4587766,"top":0.9481245,"width":0.06582447,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Required","depth":22,"bounds":{"left":0.5851064,"top":0.9489226,"width":0.017287234,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse 8 successful checks group","depth":16,"bounds":{"left":0.359375,"top":0.9688747,"width":0.050199468,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"8 successful checks","depth":18,"bounds":{"left":0.36236703,"top":0.97406226,"width":0.038896278,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"successful checks","depth":19,"bounds":{"left":0.359375,"top":0.9912211,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"successful checks","depth":20,"bounds":{"left":0.359375,"top":0.9952115,"width":0.05219415,"height":0.004788518},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"ci/circleci: build-backend","depth":22,"bounds":{"left":0.3806516,"top":0.99840385,"width":0.053856384,"height":0.0015961528},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"ci/circleci: build-backend","depth":23,"bounds":{"left":0.3806516,"top":0.99840385,"width":0.053856384,"height":0.0015961528},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ci/circleci: build-backend","depth":24,"bounds":{"left":0.3806516,"top":0.99840385,"width":0.053856384,"height":0.0015961528},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— Your tests passed on CircleCI!","depth":22,"bounds":{"left":0.43833113,"top":1.0,"width":0.06100399,"height":0.0},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions","depth":21,"bounds":{"left":0.60738033,"top":0.9928172,"width":0.010638298,"height":0.007182777},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"ci/circleci: build-frontend","depth":22,"bounds":{"left":0.3806516,"top":1.0,"width":0.053690158,"height":-0.027933002},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"ci/circleci: build-frontend","depth":23,"bounds":{"left":0.3806516,"top":1.0,"width":0.053690158,"height":-0.027933002},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ci/circleci: build-frontend","depth":24,"bounds":{"left":0.3806516,"top":1.0,"width":0.053690158,"height":-0.027933002},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— Your tests passed on CircleCI!","depth":22,"bounds":{"left":0.4381649,"top":1.0,"width":0.06100399,"height":-0.029529095},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions","depth":21,"bounds":{"left":0.60738033,"top":1.0,"width":0.010638298,"height":-0.022346377},"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"ci/circleci: checkout-code","depth":22,"bounds":{"left":0.3806516,"top":1.0,"width":0.055352394,"height":-0.057462096},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"ci/circleci: checkout-code","depth":23,"bounds":{"left":0.3806516,"top":1.0,"width":0.055352394,"height":-0.057462096},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ci/circleci: checkout-code","depth":24,"bounds":{"left":0.3806516,"top":1.0,"width":0.055352394,"height":-0.057462096},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— Your tests passed on CircleCI!","depth":22,"bounds":{"left":0.4398271,"top":1.0,"width":0.06100399,"height":-0.05905831},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions","depth":21,"bounds":{"left":0.60738033,"top":1.0,"width":0.010638298,"height":-0.051875472},"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"ci/circleci: phpstan","depth":22,"bounds":{"left":0.3806516,"top":1.0,"width":0.040226065,"height":-0.08699119},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"ci/circleci: phpstan","depth":23,"bounds":{"left":0.3806516,"top":1.0,"width":0.040226065,"height":-0.08699119},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ci/circleci: phpstan","depth":24,"bounds":{"left":0.3806516,"top":1.0,"width":0.040226065,"height":-0.08699119},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— Your tests passed on CircleCI!","depth":22,"bounds":{"left":0.4247008,"top":1.0,"width":0.06100399,"height":-0.0885874},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions","depth":21,"bounds":{"left":0.60738033,"top":1.0,"width":0.010638298,"height":-0.081404686},"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"ci/circleci: setup","depth":22,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"ci/circleci: setup","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ci/circleci: setup","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— Your tests passed on CircleCI!","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions","depth":21,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"ci/circleci: test-backend-lint","depth":22,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"ci/circleci: test-backend-lint","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ci/circleci: test-backend-lint","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— Your tests passed on CircleCI!","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions","depth":21,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"ci/circleci: test-frontend","depth":22,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"ci/circleci: test-frontend","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ci/circleci: test-frontend","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— Your tests passed on CircleCI!","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions","depth":21,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"setup-workflow","depth":22,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"setup-workflow","depth":23,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"setup-workflow","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Successful in 34s","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— Workflow: setup-workflow","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions","depth":21,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"This branch is out-of-date with the base branch","depth":14,"bounds":{"left":0.37533244,"top":1.0,"width":0.18999335,"height":-0.07821226},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This branch is out-of-date with the base branch","depth":15,"bounds":{"left":0.37533244,"top":1.0,"width":0.12051197,"height":-0.08020747},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge the latest changes from master into this branch. This merge commit will be associated with LakyLak.","depth":15,"bounds":{"left":0.37533244,"top":1.0,"width":0.17569813,"height":-0.098962545},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Update branch","depth":14,"bounds":{"left":0.56798536,"top":1.0,"width":0.04138963,"height":-0.07821226},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Update branch","depth":16,"bounds":{"left":0.57230717,"top":1.0,"width":0.03274601,"height":-0.08419788},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Update branch options","depth":15,"bounds":{"left":0.6090425,"top":1.0,"width":0.010638298,"height":-0.07821226},"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Merging is blocked","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merging is blocked","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"At least 1 approving review is required by reviewers with write access.","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Enable auto-merge","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enable auto-merge","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Select merge method","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"You can also merge this with the command line.","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"View command line instructions.","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Still in progress?","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Convert to draft","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Convert to draft","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Add a comment","depth":17,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Add a comment","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Comment","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Write","depth":18,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Write","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Preview","depth":18,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Preview","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextArea","text":"Comment","depth":20,"on_screen":false,"placeholder":" ","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Markdown is supported","depth":19,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Markdown","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is supported","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Paste, drop, or click to add files","depth":18,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Paste, drop, or click to add files","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close pull request","depth":17,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Close pull request","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Comment","depth":17,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Remember, contributions to this repository should follow our","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GitHub Community Guidelines","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub Community Guidelines","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ProTip!","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Add comments to specific lines under","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Files changed","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Files changed","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Reviewers","depth":16,"bounds":{"left":0.6356383,"top":0.3140463,"width":0.10638298,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Suggestions","depth":16,"bounds":{"left":0.6356383,"top":0.33918595,"width":0.023271276,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Request","depth":17,"bounds":{"left":0.72623,"top":0.3603352,"width":0.015791224,"height":0.014365523},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Request","depth":19,"bounds":{"left":0.72623,"top":0.36153233,"width":0.015791224,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@ivhristova","depth":16,"bounds":{"left":0.6356383,"top":0.3603352,"width":0.00930851,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"ivhristova","depth":16,"bounds":{"left":0.6449468,"top":0.3603352,"width":0.019115692,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ivhristova","depth":17,"bounds":{"left":0.6449468,"top":0.36272946,"width":0.019115692,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Request","depth":17,"bounds":{"left":0.72623,"top":0.38467678,"width":0.015791224,"height":0.014365523},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Request","depth":19,"bounds":{"left":0.72623,"top":0.3858739,"width":0.015791224,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@mihailmihaylovjiminny","depth":16,"bounds":{"left":0.6356383,"top":0.38467678,"width":0.00930851,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"mihailmihaylovjiminny","depth":16,"bounds":{"left":0.6449468,"top":0.38467678,"width":0.043218084,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"mihailmihaylovjiminny","depth":17,"bounds":{"left":0.6449468,"top":0.386672,"width":0.043218084,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"At least 1 approving review is required to merge this pull request.","depth":16,"bounds":{"left":0.6356383,"top":0.40981644,"width":0.105053194,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Still in progress?","depth":16,"bounds":{"left":0.6356383,"top":0.45291302,"width":0.031083776,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Convert to draft","depth":16,"bounds":{"left":0.66805184,"top":0.4517159,"width":0.029920213,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Assignees","depth":16,"bounds":{"left":0.6356383,"top":0.49561054,"width":0.10638298,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"No one—","depth":15,"bounds":{"left":0.6356383,"top":0.5207502,"width":0.016788565,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"assign yourself","depth":15,"bounds":{"left":0.65242684,"top":0.51955307,"width":0.02825798,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Labels","depth":15,"bounds":{"left":0.6356383,"top":0.55706304,"width":0.10638298,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"None yet","depth":14,"bounds":{"left":0.6356383,"top":0.58220273,"width":0.016788565,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Projects","depth":16,"bounds":{"left":0.6356383,"top":0.61851555,"width":0.10638298,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"None yet","depth":15,"bounds":{"left":0.6356383,"top":0.64365524,"width":0.016788565,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Milestone","depth":16,"bounds":{"left":0.6356383,"top":0.67996806,"width":0.10638298,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"No milestone","depth":15,"bounds":{"left":0.6356383,"top":0.70510775,"width":0.024601065,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Development","depth":17,"bounds":{"left":0.6356383,"top":0.74461293,"width":0.10638298,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Development","depth":18,"bounds":{"left":0.6356383,"top":0.74581003,"width":0.025764627,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Successfully merging this pull request may close these issues.","depth":18,"bounds":{"left":0.6356383,"top":0.76656026,"width":0.10305851,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"None yet","depth":18,"bounds":{"left":0.6356383,"top":0.8032721,"width":0.016788565,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Notifications Customize","depth":15,"bounds":{"left":0.6356383,"top":0.839585,"width":0.10638298,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Notifications","depth":17,"bounds":{"left":0.6356383,"top":0.8439745,"width":0.025099734,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Customize","depth":17,"bounds":{"left":0.72207445,"top":0.8439745,"width":0.019946808,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unsubscribe","depth":16,"bounds":{"left":0.6356383,"top":0.86352754,"width":0.10638298,"height":0.022346368},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unsubscribe","depth":18,"bounds":{"left":0.68002,"top":0.8687151,"width":0.024102394,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You’re receiving notifications because you’re watching this repository.","depth":16,"bounds":{"left":0.6356383,"top":0.8902634,"width":0.1022274,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1 participant","depth":15,"bounds":{"left":0.6356383,"top":0.94413406,"width":0.10638298,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1 participant","depth":16,"bounds":{"left":0.6356383,"top":0.9453312,"width":0.02443484,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":15,"bounds":{"left":0.6356383,"top":0.9680766,"width":0.008643617,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-5488729501555084754
|
4203034040803789205
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Close tab
Pipelines - jiminny/app
Pipelines - jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (30)
Pull requests
(
30
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality
Security and quality
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
Allow owner's role to be selected when setting up a trial #12092 Edit title
Allow owner's role to be selected when setting up a trial
#
12092
Edit title
Checks pending
Checks pending
Code
Code
Open
LakyLak
LakyLak
wants to merge 1 commit into
master
master
from
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
Copy head branch name to clipboard
Lines changed: 12 additions & 1 deletion
Conversation (0)
Conversation
(
0
)
Commits (1)
Commits
(
1
)
Checks (2)
Checks
(
2
)
Files changed (3)
Files changed
(
3
)
Conversation
Conversation
@LakyLak
Show options
LakyLak commented 3 minutes ago
LakyLak
LakyLak
commented
3 minutes ago
3 minutes ago
JIRA: JY-20613
JIRA:
JY-20613
JY-20613
Changes:
Changes:
Add support for owner role
Add or remove reactions
@LakyLak
JY-20613
JY-20613
support owner role on setup team
support owner role on setup team
8 / 10 checks OK
6fae8bb
6fae8bb
@nikolay-yankov
nikolay-yankov
nikolay-yankov
changed the title
JY-20613 support owner role on setup team
Allow owner's role to be selected when setting up a trial
2 minutes ago
2 minutes ago
This branch has not been deployed
This branch has not been deployed
No deployments
Merge info
Merge info
Review required
Review required
At least 1 approving review is required by reviewers with write access.
Some checks were not successful
Some checks were not successful
2 failing, 1 expected, 8 successful checks
Collapse checks
Collapse 2 failing checks group
2 failing checks
Checks settings
failing checks
failing checks
build_accept_deploy
build_accept_deploy
build_accept_deploy
Failing after 12m
— Workflow: build_accept_deploy
More actions
ci/circleci: test
ci/circleci: test
ci/circleci: test
— Your tests failed on CircleCI
More actions
Collapse 1 pending check group
1 pending check
pending checks
pending checks
SonarCloud Code Analysis
SonarCloud Code Analysis
Expected
— Waiting for status to be reported
Required
Collapse 8 successful checks group
8 successful checks
successful checks
successful checks
ci/circleci: build-backend
ci/circleci: build-backend
ci/circleci: build-backend
— Your tests passed on CircleCI!
More actions
ci/circleci: build-frontend
ci/circleci: build-frontend
ci/circleci: build-frontend
— Your tests passed on CircleCI!
More actions
ci/circleci: checkout-code
ci/circleci: checkout-code
ci/circleci: checkout-code
— Your tests passed on CircleCI!
More actions
ci/circleci: phpstan
ci/circleci: phpstan
ci/circleci: phpstan
— Your tests passed on CircleCI!
More actions
ci/circleci: setup
ci/circleci: setup
ci/circleci: setup
— Your tests passed on CircleCI!
More actions
ci/circleci: test-backend-lint
ci/circleci: test-backend-lint
ci/circleci: test-backend-lint
— Your tests passed on CircleCI!
More actions
ci/circleci: test-frontend
ci/circleci: test-frontend
ci/circleci: test-frontend
— Your tests passed on CircleCI!
More actions
setup-workflow
setup-workflow
setup-workflow
Successful in 34s
— Workflow: setup-workflow
More actions
This branch is out-of-date with the base branch
This branch is out-of-date with the base branch
Merge the latest changes from master into this branch. This merge commit will be associated with LakyLak.
Update branch
Update branch
Update branch options
Merging is blocked
Merging is blocked
At least 1 approving review is required by reviewers with write access.
Enable auto-merge
Enable auto-merge
Select merge method
You can also merge this with the command line.
View command line instructions.
Still in progress?
Convert to draft
Convert to draft
@LakyLak
Add a comment
Add a comment
Comment
Write
Write
Preview
Preview
Comment
Markdown is supported
Markdown
is supported
Paste, drop, or click to add files
Paste, drop, or click to add files
Close pull request
Close pull request
Comment
Remember, contributions to this repository should follow our
GitHub Community Guidelines
GitHub Community Guidelines
.
ProTip!
Add comments to specific lines under
Files changed
Files changed
.
Reviewers
Suggestions
Request
Request
@ivhristova
ivhristova
ivhristova
Request
Request
@mihailmihaylovjiminny
mihailmihaylovjiminny
mihailmihaylovjiminny
At least 1 approving review is required to merge this pull request.
Still in progress?
Convert to draft
Assignees
No one—
assign yourself
Labels
None yet
Projects
None yet
Milestone
No milestone
Development
Development
Successfully merging this pull request may close these issues.
None yet
Notifications Customize
Notifications
Customize
Unsubscribe
Unsubscribe
You’re receiving notifications because you’re watching this repository.
1 participant
1 participant
@LakyLak...
|
51628
|
NULL
|
NULL
|
NULL
|
|
51630
|
1813
|
4
|
2026-05-18T08:51:36.679419+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094296679_m1.jpg...
|
Firefox
|
Pipelines - jiminny/app — Work
|
1
|
app.circleci.com/pipelines/github/jiminny/app
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
Project Outline app
app
app
app
Overview
Overview
Settings
Settings
Deploys
Deploys
Lightning Manage triggers
Manage triggers
Trigger Pipeline
Pipelines All pipelines my-pipelines-filter
All pipelines
app Project Filter. Selected "app"
app
All branches Branch Filter. Selected "All branches"
All branches
Start Time Cutoff date Arrow Drop Down
Cutoff date
All statuses Arrow Drop Down
All
statuses
Filter Display options
Display options
Pipeline
Status
Workflow
Checkout source
Trigger event
Start
Duration
Actions
app
58490
58490
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
23m 20s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Open commit on version control site
d94a285
Merge branch 'master' into JY-20808-low-priority-indexing-queue
Push
Commit pushed
Copy timestamp to clipboard
1m ago
Copy timestamp duration to clipboard
Rerun workflow from start...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Go to home page","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Auto theme","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open notifications","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open support menu","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open user menu","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"org avatar Current organization: jiminny","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Home","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Runners","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Runners","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Org","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Org","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Plan","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Plan","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk sidecars","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk sidecars","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PREVIEW","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard All Pipelines","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Pipelines","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Project Outline app","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"app","depth":13,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Overview","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Overview","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Lightning Manage triggers","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Manage triggers","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Trigger Pipeline","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pipelines All pipelines my-pipelines-filter","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All pipelines","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"app Project Filter. Selected \"app\"","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"All branches Branch Filter. Selected \"All branches\"","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All branches","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Start Time Cutoff date Arrow Drop Down","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cutoff date","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"All statuses Arrow Drop Down","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"statuses","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filter Display options","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Display options","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pipeline","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Status","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Workflow","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Checkout source","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Trigger event","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Start","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Duration","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actions","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"58490","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"58490","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Status Running Running","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Running","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23m 20s","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"remain","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Info Outline","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"build_accept_deploy","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20808-low-priority-indexing-queue","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20808-low-priority-indexing-queue","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"d94a285","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge branch 'master' into JY-20808-low-priority-indexing-queue","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Push","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit pushed","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m ago","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp duration to clipboard","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from start","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false}]...
|
8379575569718381619
|
3749084244269232273
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
Project Outline app
app
app
app
Overview
Overview
Settings
Settings
Deploys
Deploys
Lightning Manage triggers
Manage triggers
Trigger Pipeline
Pipelines All pipelines my-pipelines-filter
All pipelines
app Project Filter. Selected "app"
app
All branches Branch Filter. Selected "All branches"
All branches
Start Time Cutoff date Arrow Drop Down
Cutoff date
All statuses Arrow Drop Down
All
statuses
Filter Display options
Display options
Pipeline
Status
Workflow
Checkout source
Trigger event
Start
Duration
Actions
app
58490
58490
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
23m 20s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Open commit on version control site
d94a285
Merge branch 'master' into JY-20808-low-priority-indexing-queue
Push
Commit pushed
Copy timestamp to clipboard
1m ago
Copy timestamp duration to clipboard
Rerun workflow from start...
|
51627
|
NULL
|
NULL
|
NULL
|
|
51631
|
1814
|
6
|
2026-05-18T08:51:36.694300+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094296694_m2.jpg...
|
Firefox
|
Pipelines - jiminny/app — Work
|
1
|
app.circleci.com/pipelines/github/jiminny/app
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
Project Outline app
app
app
app
Overview
Overview
Settings
Settings
Deploys
Deploys
Lightning Manage triggers
Manage triggers
Trigger Pipeline
Pipelines All pipelines my-pipelines-filter
All pipelines
app Project Filter. Selected "app"
app
All branches Branch Filter. Selected "All branches"
All branches
Start Time Cutoff date Arrow Drop Down
Cutoff date
All statuses Arrow Drop Down
All
statuses
Filter Display options
Display options
Pipeline
Status
Workflow
Checkout source
Trigger event
Start
Duration
Actions
app
58490
58490
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
23m 20s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Open commit on version control site
d94a285
Merge branch 'master' into JY-20808-low-priority-indexing-queue
Push
Commit pushed
Copy timestamp to clipboard
1m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job checkout-code
checkout-code
888485
1m 22s
1m 22s
NOT_RUNNING job build-frontend
build-frontend
888486
0s
0s
test-frontend
888487
RUNNING job build-backend
build-backend
888488
2s
2s
phpstan
888492
setup...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.042719416,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1590758,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.18994413,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.21707901,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Go to home page","depth":9,"bounds":{"left":0.08726729,"top":0.061452515,"width":0.044215426,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Auto theme","depth":9,"bounds":{"left":0.9375,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open notifications","depth":9,"bounds":{"left":0.95212764,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open support menu","depth":9,"bounds":{"left":0.96675533,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open user menu","depth":9,"bounds":{"left":0.98138297,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"org avatar Current organization: jiminny","depth":9,"bounds":{"left":0.08693484,"top":0.10295291,"width":0.01462766,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Home","depth":10,"bounds":{"left":0.08494016,"top":0.15083799,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":12,"bounds":{"left":0.087765954,"top":0.1839585,"width":0.012965426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines","depth":10,"bounds":{"left":0.08494016,"top":0.21308859,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines","depth":12,"bounds":{"left":0.083942816,"top":0.2462091,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":10,"bounds":{"left":0.08494016,"top":0.2753392,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":12,"bounds":{"left":0.0852726,"top":0.3084597,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":10,"bounds":{"left":0.08494016,"top":0.33798882,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":12,"bounds":{"left":0.08543883,"top":0.37071028,"width":0.01761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":10,"bounds":{"left":0.08494016,"top":0.40023944,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":12,"bounds":{"left":0.085605055,"top":0.4329609,"width":0.017287234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Runners","depth":10,"bounds":{"left":0.08494016,"top":0.46249002,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Runners","depth":12,"bounds":{"left":0.0852726,"top":0.49561054,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Org","depth":10,"bounds":{"left":0.08494016,"top":0.52474064,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Org","depth":12,"bounds":{"left":0.090259306,"top":0.55786115,"width":0.007978723,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Plan","depth":10,"bounds":{"left":0.08494016,"top":0.58699125,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Plan","depth":12,"bounds":{"left":0.08959442,"top":0.6201117,"width":0.00930851,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk sidecars","depth":11,"bounds":{"left":0.07962101,"top":0.8591381,"width":0.02925532,"height":0.059457302},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk sidecars","depth":13,"bounds":{"left":0.08494016,"top":0.8922586,"width":0.01861702,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PREVIEW","depth":12,"bounds":{"left":0.08743351,"top":0.8567438,"width":0.013630319,"height":0.009177973},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk","depth":10,"bounds":{"left":0.07962101,"top":0.9345571,"width":0.02925532,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk","depth":12,"bounds":{"left":0.08726729,"top":0.96727854,"width":0.013962766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard All Pipelines","depth":15,"bounds":{"left":0.1171875,"top":0.1245012,"width":0.042054523,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Pipelines","depth":16,"bounds":{"left":0.1278258,"top":0.12609737,"width":0.030086435,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Project Outline app","depth":15,"bounds":{"left":0.16472739,"top":0.1245012,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":16,"bounds":{"left":0.17536569,"top":0.12609737,"width":0.009807181,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"app","depth":13,"bounds":{"left":0.1278258,"top":0.16400638,"width":0.016954787,"height":0.029130088},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":14,"bounds":{"left":0.1278258,"top":0.16480447,"width":0.016954787,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Overview","depth":13,"bounds":{"left":0.1171875,"top":0.19952115,"width":0.024102394,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Overview","depth":14,"bounds":{"left":0.1171875,"top":0.20151636,"width":0.024102394,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":13,"bounds":{"left":0.14660904,"top":0.19952115,"width":0.021110373,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.14660904,"top":0.20151636,"width":0.021110373,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":13,"bounds":{"left":0.17303856,"top":0.19952115,"width":0.020611702,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":14,"bounds":{"left":0.17303856,"top":0.20151636,"width":0.020611702,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Lightning Manage triggers","depth":13,"bounds":{"left":0.87017953,"top":0.16400638,"width":0.057845745,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Manage triggers","depth":15,"bounds":{"left":0.88613695,"top":0.17318435,"width":0.03656915,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Trigger Pipeline","depth":13,"bounds":{"left":0.9333444,"top":0.16400638,"width":0.0546875,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pipelines All pipelines my-pipelines-filter","depth":13,"bounds":{"left":0.1171875,"top":0.23782921,"width":0.053523935,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All pipelines","depth":16,"bounds":{"left":0.13081782,"top":0.24700718,"width":0.026263298,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"app Project Filter. Selected \"app\"","depth":13,"bounds":{"left":0.17337102,"top":0.23782921,"width":0.034242023,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app","depth":16,"bounds":{"left":0.18567154,"top":0.24700718,"width":0.00831117,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"All branches Branch Filter. Selected \"All branches\"","depth":13,"bounds":{"left":0.21027261,"top":0.23782921,"width":0.053025264,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All branches","depth":16,"bounds":{"left":0.22257313,"top":0.24700718,"width":0.027094414,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Start Time Cutoff date Arrow Drop Down","depth":13,"bounds":{"left":0.26595744,"top":0.23782921,"width":0.051030584,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cutoff date","depth":15,"bounds":{"left":0.27825797,"top":0.24700718,"width":0.025099734,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"All statuses Arrow Drop Down","depth":13,"bounds":{"left":0.3196476,"top":0.23782921,"width":0.043218084,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All","depth":14,"bounds":{"left":0.32396942,"top":0.24700718,"width":0.0066489363,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"statuses","depth":14,"bounds":{"left":0.33061835,"top":0.24700718,"width":0.01861702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filter Display options","depth":13,"bounds":{"left":0.9333444,"top":0.2386273,"width":0.0546875,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Display options","depth":14,"bounds":{"left":0.94830453,"top":0.24780527,"width":0.034075797,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pipeline","depth":14,"bounds":{"left":0.12250665,"top":0.3196329,"width":0.015292553,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Status","depth":14,"bounds":{"left":0.28740028,"top":0.3196329,"width":0.012632979,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Workflow","depth":14,"bounds":{"left":0.34424868,"top":0.3196329,"width":0.018450798,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Checkout source","depth":14,"bounds":{"left":0.5731383,"top":0.3196329,"width":0.03274601,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Trigger event","depth":14,"bounds":{"left":0.70611703,"top":0.3196329,"width":0.025764627,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Start","depth":14,"bounds":{"left":0.8640292,"top":0.3196329,"width":0.009640957,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Duration","depth":14,"bounds":{"left":0.90226066,"top":0.3196329,"width":0.01662234,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actions","depth":14,"bounds":{"left":0.92952126,"top":0.3196329,"width":0.014793883,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":13,"bounds":{"left":0.12283909,"top":0.34796488,"width":0.00831117,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"58490","depth":12,"bounds":{"left":0.12283909,"top":0.3643256,"width":0.014461436,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"58490","depth":13,"bounds":{"left":0.12283909,"top":0.36552274,"width":0.014461436,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.","depth":13,"bounds":{"left":0.27759308,"top":0.3499601,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Status Running Running","depth":12,"bounds":{"left":0.28956118,"top":0.35155627,"width":0.03274601,"height":0.023144454},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Running","depth":13,"bounds":{"left":0.30019948,"top":0.35634476,"width":0.018118352,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23m 20s","depth":13,"bounds":{"left":0.28956118,"top":0.38028732,"width":0.019281914,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"remain","depth":13,"bounds":{"left":0.30884308,"top":0.38028732,"width":0.016123671,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Info Outline","depth":12,"bounds":{"left":0.32563165,"top":0.37470073,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"build_accept_deploy","depth":12,"bounds":{"left":0.3444149,"top":0.35514766,"width":0.045545213,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":13,"bounds":{"left":0.3444149,"top":0.35594574,"width":0.045545213,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20808-low-priority-indexing-queue","depth":13,"bounds":{"left":0.5728058,"top":0.34836394,"width":0.08726729,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20808-low-priority-indexing-queue","depth":14,"bounds":{"left":0.5728058,"top":0.349162,"width":0.08726729,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":14,"bounds":{"left":0.5728058,"top":0.36711892,"width":0.12765957,"height":0.033519555},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"d94a285","depth":16,"bounds":{"left":0.5728058,"top":0.36871508,"width":0.020279255,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge branch 'master' into JY-20808-low-priority-indexing-queue","depth":16,"bounds":{"left":0.5728058,"top":0.36871508,"width":0.11635638,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Push","depth":13,"bounds":{"left":0.7190825,"top":0.35594574,"width":0.011303191,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit pushed","depth":14,"bounds":{"left":0.73171544,"top":0.35594574,"width":0.034574468,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":13,"bounds":{"left":0.8515625,"top":0.34836394,"width":0.027094414,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m ago","depth":15,"bounds":{"left":0.8572141,"top":0.3575419,"width":0.015791224,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp duration to clipboard","depth":13,"bounds":{"left":0.8962766,"top":0.34836394,"width":0.027593086,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from start","depth":12,"bounds":{"left":0.92918885,"top":0.35155627,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from failed","depth":12,"bounds":{"left":0.93982714,"top":0.35155627,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Cancel workflow","depth":12,"bounds":{"left":0.95046544,"top":0.35155627,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix workflow","depth":12,"bounds":{"left":0.96110374,"top":0.35155627,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More Actions","depth":12,"bounds":{"left":0.97174203,"top":0.35155627,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Jobs","depth":14,"bounds":{"left":0.26080453,"top":0.42657623,"width":0.010804521,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SUCCESS job checkout-code","depth":14,"bounds":{"left":0.28756648,"top":0.42418197,"width":0.41805187,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"checkout-code","depth":15,"bounds":{"left":0.30285904,"top":0.42657623,"width":0.03374335,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888485","depth":16,"bounds":{"left":0.33926198,"top":0.42657623,"width":0.017287234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1m 22s","depth":14,"bounds":{"left":0.90242684,"top":0.42418197,"width":0.016123671,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m 22s","depth":15,"bounds":{"left":0.90242684,"top":0.42657623,"width":0.016123671,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"NOT_RUNNING job build-frontend","depth":14,"bounds":{"left":0.28756648,"top":0.44972068,"width":0.41805187,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build-frontend","depth":15,"bounds":{"left":0.30285904,"top":0.4521149,"width":0.032247342,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888486","depth":16,"bounds":{"left":0.33776596,"top":0.4521149,"width":0.017287234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0s","depth":14,"bounds":{"left":0.91306514,"top":0.44972068,"width":0.005485372,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0s","depth":15,"bounds":{"left":0.91306514,"top":0.4521149,"width":0.005485372,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test-frontend","depth":15,"bounds":{"left":0.30285904,"top":0.47765362,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888487","depth":16,"bounds":{"left":0.33494017,"top":0.47765362,"width":0.017121011,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RUNNING job build-backend","depth":14,"bounds":{"left":0.28756648,"top":0.5007981,"width":0.41805187,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build-backend","depth":15,"bounds":{"left":0.30285904,"top":0.50319237,"width":0.032081116,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888488","depth":16,"bounds":{"left":0.33759972,"top":0.50319237,"width":0.017453458,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"2s","depth":14,"bounds":{"left":0.91306514,"top":0.5007981,"width":0.005485372,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2s","depth":15,"bounds":{"left":0.91306514,"top":0.50319237,"width":0.005485372,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"phpstan","depth":15,"bounds":{"left":0.30285904,"top":0.52873105,"width":0.017785905,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888492","depth":16,"bounds":{"left":0.32330453,"top":0.52873105,"width":0.017453458,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setup","depth":15,"bounds":{"left":0.30285904,"top":0.55426973,"width":0.012300532,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-3050756961016535498
|
3748979103604043921
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
Project Outline app
app
app
app
Overview
Overview
Settings
Settings
Deploys
Deploys
Lightning Manage triggers
Manage triggers
Trigger Pipeline
Pipelines All pipelines my-pipelines-filter
All pipelines
app Project Filter. Selected "app"
app
All branches Branch Filter. Selected "All branches"
All branches
Start Time Cutoff date Arrow Drop Down
Cutoff date
All statuses Arrow Drop Down
All
statuses
Filter Display options
Display options
Pipeline
Status
Workflow
Checkout source
Trigger event
Start
Duration
Actions
app
58490
58490
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
23m 20s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Open commit on version control site
d94a285
Merge branch 'master' into JY-20808-low-priority-indexing-queue
Push
Commit pushed
Copy timestamp to clipboard
1m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job checkout-code
checkout-code
888485
1m 22s
1m 22s
NOT_RUNNING job build-frontend
build-frontend
888486
0s
0s
test-frontend
888487
RUNNING job build-backend
build-backend
888488
2s
2s
phpstan
888492
setup...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51632
|
1814
|
7
|
2026-05-18T08:51:37.389540+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094297389_m2.jpg...
|
Firefox
|
Pipelines - jiminny/app — Work
|
1
|
app.circleci.com/pipelines/github/jiminny/app
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
Project Outline app
app
app
app
Overview
Overview
Settings
Settings
Deploys
Deploys
Lightning Manage triggers
Manage triggers
Trigger Pipeline...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.042719416,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1590758,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.18994413,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.21707901,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Go to home page","depth":9,"bounds":{"left":0.08726729,"top":0.061452515,"width":0.044215426,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Auto theme","depth":9,"bounds":{"left":0.9375,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open notifications","depth":9,"bounds":{"left":0.95212764,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open support menu","depth":9,"bounds":{"left":0.96675533,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open user menu","depth":9,"bounds":{"left":0.98138297,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"org avatar Current organization: jiminny","depth":9,"bounds":{"left":0.08693484,"top":0.10295291,"width":0.01462766,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Home","depth":10,"bounds":{"left":0.08494016,"top":0.15083799,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":12,"bounds":{"left":0.087765954,"top":0.1839585,"width":0.012965426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines","depth":10,"bounds":{"left":0.08494016,"top":0.21308859,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines","depth":12,"bounds":{"left":0.083942816,"top":0.2462091,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":10,"bounds":{"left":0.08494016,"top":0.2753392,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":12,"bounds":{"left":0.0852726,"top":0.3084597,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":10,"bounds":{"left":0.08494016,"top":0.33798882,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":12,"bounds":{"left":0.08543883,"top":0.37071028,"width":0.01761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":10,"bounds":{"left":0.08494016,"top":0.40023944,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":12,"bounds":{"left":0.085605055,"top":0.4329609,"width":0.017287234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Runners","depth":10,"bounds":{"left":0.08494016,"top":0.46249002,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Runners","depth":12,"bounds":{"left":0.0852726,"top":0.49561054,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Org","depth":10,"bounds":{"left":0.08494016,"top":0.52474064,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Org","depth":12,"bounds":{"left":0.090259306,"top":0.55786115,"width":0.007978723,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Plan","depth":10,"bounds":{"left":0.08494016,"top":0.58699125,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Plan","depth":12,"bounds":{"left":0.08959442,"top":0.6201117,"width":0.00930851,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk sidecars","depth":11,"bounds":{"left":0.07962101,"top":0.8591381,"width":0.02925532,"height":0.059457302},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk sidecars","depth":13,"bounds":{"left":0.08494016,"top":0.8922586,"width":0.01861702,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PREVIEW","depth":12,"bounds":{"left":0.08743351,"top":0.8567438,"width":0.013630319,"height":0.009177973},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk","depth":10,"bounds":{"left":0.07962101,"top":0.9345571,"width":0.02925532,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk","depth":12,"bounds":{"left":0.08726729,"top":0.96727854,"width":0.013962766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard All Pipelines","depth":15,"bounds":{"left":0.1171875,"top":0.1245012,"width":0.042054523,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Pipelines","depth":16,"bounds":{"left":0.1278258,"top":0.12609737,"width":0.030086435,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Project Outline app","depth":15,"bounds":{"left":0.16472739,"top":0.1245012,"width":0.021775266,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":16,"bounds":{"left":0.17536569,"top":0.12609737,"width":0.009807181,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"app","depth":13,"bounds":{"left":0.1278258,"top":0.16400638,"width":0.016954787,"height":0.029130088},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":14,"bounds":{"left":0.1278258,"top":0.16480447,"width":0.016954787,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Overview","depth":13,"bounds":{"left":0.1171875,"top":0.19952115,"width":0.024102394,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Overview","depth":14,"bounds":{"left":0.1171875,"top":0.20151636,"width":0.024102394,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":13,"bounds":{"left":0.14660904,"top":0.19952115,"width":0.021110373,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.14660904,"top":0.20151636,"width":0.021110373,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":13,"bounds":{"left":0.17303856,"top":0.19952115,"width":0.020611702,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":14,"bounds":{"left":0.17303856,"top":0.20151636,"width":0.020611702,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Lightning Manage triggers","depth":13,"bounds":{"left":0.87017953,"top":0.04988029,"width":0.057845745,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Manage triggers","depth":15,"bounds":{"left":0.88613695,"top":0.05905826,"width":0.03656915,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Trigger Pipeline","depth":13,"bounds":{"left":0.9333444,"top":0.04988029,"width":0.0546875,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-6499832339644428489
|
8526521498866561171
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
Project Outline app
app
app
app
Overview
Overview
Settings
Settings
Deploys
Deploys
Lightning Manage triggers
Manage triggers
Trigger Pipeline...
|
51631
|
NULL
|
NULL
|
NULL
|
|
51633
|
1814
|
8
|
2026-05-18T08:51:40.398369+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094300398_m2.jpg...
|
Firefox
|
Pipelines - jiminny/app — Work
|
1
|
app.circleci.com/pipelines/github/jiminny/app
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
Project Outline app
app
app
app
Overview
Overview
Settings
Settings
Deploys
Deploys
Lightning Manage triggers
Manage triggers
Trigger Pipeline
Pipelines All pipelines my-pipelines-filter
All pipelines
app Project Filter. Selected "app"
app
All branches Branch Filter. Selected "All branches"
All branches
Start Time Cutoff date Arrow Drop Down
Cutoff date
All statuses Arrow Drop Down
All
statuses
Filter Display options
Display options
Pipeline
Status
Workflow
Checkout source
Trigger event
Start
Duration
Actions
app
58490
58490
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
23m 14s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Open commit on version control site
d94a285
Merge branch 'master' into JY-20808-low-priority-indexing-queue
Push
Commit pushed
Copy timestamp to clipboard
2m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job checkout-code
checkout-code
888485
1m 22s
1m 22s
RUNNING job build-frontend
build-frontend
888486
6s
6s
test-frontend
888487
RUNNING job build-backend
build-backend
888488
7s
7s
phpstan
888492
setup
888490
test
888491
test-backend-lint
888489
sonar_cloud
888493
SUCCESS workflow setup-workflow. Collapse the workflow jobs list.
Status Passed Success
Success
setup-workflow
setup-workflow
SETUP
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Open commit on version control site
d94a285
Merge branch 'master' into JY-20808-low-priority-indexing-queue
Push
Commit pushed
Copy timestamp to clipboard
2m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job setup
setup
888475
56s
56s
app
58489
58489
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
22m 37s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20893-chunk-control-per-update-target
JY-20893-chunk-control-per-update-target
Open commit on version control site
fb4a7f6
Merge branch 'master' into JY-20893-chunk-control-per-update-target
Push
Commit pushed
Copy timestamp to clipboard
2m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job checkout-code
checkout-code
888476
1m 18s
1m 18s
RUNNING job build-frontend
build-frontend
888477
47s
47s
test-frontend
888478
RUNNING job build-backend
build-backend
888479
47s
47s
phpstan
888483
setup
888481
test
888482
test-backend-lint
888480
sonar_cloud
888484
SUCCESS workflow setup-workflow. Collapse the workflow jobs list.
Status Passed Success
Success
setup-workflow
setup-workflow
SETUP
JY-20893-chunk-control-per-update-target
JY-20893-chunk-control-per-update-target
Open commit on version control site
fb4a7f6
Merge branch 'master' into JY-20893-chunk-control-per-update-target
Push
Commit pushed
Copy timestamp to clipboard
3m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job setup
setup
888474
37s
37s
app
58488
58488
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
12m 14s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20920-fix-participant-matcher
JY-20920-fix-participant-matcher
Open commit on version control site
eb6cfc4
JY-20920: Fix participant matcher
Push
Commit pushed
Copy timestamp to clipboard
13m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job checkout-code
checkout-code
888465
2m 0s
2m 0s
SUCCESS job build-frontend
build-frontend
888469
1m 31s...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.042719416,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1590758,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.18994413,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.21707901,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Go to home page","depth":9,"bounds":{"left":0.08726729,"top":0.061452515,"width":0.044215426,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Auto theme","depth":9,"bounds":{"left":0.9375,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open notifications","depth":9,"bounds":{"left":0.95212764,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open support menu","depth":9,"bounds":{"left":0.96675533,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open user menu","depth":9,"bounds":{"left":0.98138297,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"org avatar Current organization: jiminny","depth":9,"bounds":{"left":0.08693484,"top":0.10295291,"width":0.01462766,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Home","depth":10,"bounds":{"left":0.08494016,"top":0.15083799,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":12,"bounds":{"left":0.087765954,"top":0.1839585,"width":0.012965426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines","depth":10,"bounds":{"left":0.08494016,"top":0.21308859,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines","depth":12,"bounds":{"left":0.083942816,"top":0.2462091,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":10,"bounds":{"left":0.08494016,"top":0.2753392,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":12,"bounds":{"left":0.0852726,"top":0.3084597,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":10,"bounds":{"left":0.08494016,"top":0.33798882,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":12,"bounds":{"left":0.08543883,"top":0.37071028,"width":0.01761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":10,"bounds":{"left":0.08494016,"top":0.40023944,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":12,"bounds":{"left":0.085605055,"top":0.4329609,"width":0.017287234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Runners","depth":10,"bounds":{"left":0.08494016,"top":0.46249002,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Runners","depth":12,"bounds":{"left":0.0852726,"top":0.49561054,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Org","depth":10,"bounds":{"left":0.08494016,"top":0.52474064,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Org","depth":12,"bounds":{"left":0.090259306,"top":0.55786115,"width":0.007978723,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Plan","depth":10,"bounds":{"left":0.08494016,"top":0.58699125,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Plan","depth":12,"bounds":{"left":0.08959442,"top":0.6201117,"width":0.00930851,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk sidecars","depth":11,"bounds":{"left":0.07962101,"top":0.8591381,"width":0.02925532,"height":0.059457302},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk sidecars","depth":13,"bounds":{"left":0.08494016,"top":0.8922586,"width":0.01861702,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PREVIEW","depth":12,"bounds":{"left":0.08743351,"top":0.8567438,"width":0.013630319,"height":0.009177973},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk","depth":10,"bounds":{"left":0.07962101,"top":0.9345571,"width":0.02925532,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk","depth":12,"bounds":{"left":0.08726729,"top":0.96727854,"width":0.013962766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard All Pipelines","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Pipelines","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Project Outline app","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"app","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Overview","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Overview","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Lightning Manage triggers","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Manage triggers","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Trigger Pipeline","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pipelines All pipelines my-pipelines-filter","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All pipelines","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"app Project Filter. Selected \"app\"","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"All branches Branch Filter. Selected \"All branches\"","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All branches","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Start Time Cutoff date Arrow Drop Down","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cutoff date","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"All statuses Arrow Drop Down","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"statuses","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filter Display options","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Display options","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pipeline","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Status","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Workflow","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Checkout source","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Trigger event","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Start","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Duration","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actions","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"58490","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"58490","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Status Running Running","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Running","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23m 14s","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"remain","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Info Outline","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"build_accept_deploy","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20808-low-priority-indexing-queue","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20808-low-priority-indexing-queue","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"d94a285","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge branch 'master' into JY-20808-low-priority-indexing-queue","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Push","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit pushed","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2m ago","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp duration to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from start","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from failed","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Cancel workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More Actions","depth":12,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Jobs","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SUCCESS job checkout-code","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"checkout-code","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888485","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1m 22s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m 22s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RUNNING job build-frontend","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build-frontend","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888486","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"6s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test-frontend","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888487","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RUNNING job build-backend","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build-backend","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888488","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"7s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"phpstan","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888492","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888490","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888491","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test-backend-lint","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888489","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sonar_cloud","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888493","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"SUCCESS workflow setup-workflow. Collapse the workflow jobs list.","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Status Passed Success","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Success","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"setup-workflow","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"setup-workflow","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SETUP","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20808-low-priority-indexing-queue","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20808-low-priority-indexing-queue","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"d94a285","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge branch 'master' into JY-20808-low-priority-indexing-queue","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Push","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit pushed","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2m ago","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp duration to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from start","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from failed","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Cancel workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More Actions","depth":12,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Jobs","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SUCCESS job setup","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888475","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"56s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"56s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"58489","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"58489","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Status Running Running","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Running","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22m 37s","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"remain","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Info Outline","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"build_accept_deploy","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20893-chunk-control-per-update-target","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20893-chunk-control-per-update-target","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"fb4a7f6","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge branch 'master' into JY-20893-chunk-control-per-update-target","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Push","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit pushed","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2m ago","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp duration to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from start","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from failed","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Cancel workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More Actions","depth":12,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Jobs","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SUCCESS job checkout-code","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"checkout-code","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888476","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1m 18s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m 18s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RUNNING job build-frontend","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build-frontend","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888477","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"47s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"47s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test-frontend","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888478","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RUNNING job build-backend","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build-backend","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888479","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"47s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"47s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"phpstan","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888483","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888481","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888482","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test-backend-lint","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888480","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sonar_cloud","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888484","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"SUCCESS workflow setup-workflow. Collapse the workflow jobs list.","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Status Passed Success","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Success","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"setup-workflow","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"setup-workflow","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SETUP","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20893-chunk-control-per-update-target","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20893-chunk-control-per-update-target","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"fb4a7f6","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge branch 'master' into JY-20893-chunk-control-per-update-target","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Push","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit pushed","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3m ago","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp duration to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from start","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from failed","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Cancel workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More Actions","depth":12,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Jobs","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SUCCESS job setup","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888474","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"37s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"37s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"58488","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"58488","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Status Running Running","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Running","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12m 14s","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"remain","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Info Outline","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"build_accept_deploy","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20920-fix-participant-matcher","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20920-fix-participant-matcher","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"eb6cfc4","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JY-20920: Fix participant matcher","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Push","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit pushed","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"13m ago","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp duration to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from start","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from failed","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Cancel workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More Actions","depth":12,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Jobs","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SUCCESS job checkout-code","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"checkout-code","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888465","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"2m 0s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2m 0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SUCCESS job build-frontend","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build-frontend","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888469","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1m 31s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
5040429400434866919
|
-8284850210051557743
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
Project Outline app
app
app
app
Overview
Overview
Settings
Settings
Deploys
Deploys
Lightning Manage triggers
Manage triggers
Trigger Pipeline
Pipelines All pipelines my-pipelines-filter
All pipelines
app Project Filter. Selected "app"
app
All branches Branch Filter. Selected "All branches"
All branches
Start Time Cutoff date Arrow Drop Down
Cutoff date
All statuses Arrow Drop Down
All
statuses
Filter Display options
Display options
Pipeline
Status
Workflow
Checkout source
Trigger event
Start
Duration
Actions
app
58490
58490
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
23m 14s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Open commit on version control site
d94a285
Merge branch 'master' into JY-20808-low-priority-indexing-queue
Push
Commit pushed
Copy timestamp to clipboard
2m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job checkout-code
checkout-code
888485
1m 22s
1m 22s
RUNNING job build-frontend
build-frontend
888486
6s
6s
test-frontend
888487
RUNNING job build-backend
build-backend
888488
7s
7s
phpstan
888492
setup
888490
test
888491
test-backend-lint
888489
sonar_cloud
888493
SUCCESS workflow setup-workflow. Collapse the workflow jobs list.
Status Passed Success
Success
setup-workflow
setup-workflow
SETUP
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Open commit on version control site
d94a285
Merge branch 'master' into JY-20808-low-priority-indexing-queue
Push
Commit pushed
Copy timestamp to clipboard
2m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job setup
setup
888475
56s
56s
app
58489
58489
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
22m 37s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20893-chunk-control-per-update-target
JY-20893-chunk-control-per-update-target
Open commit on version control site
fb4a7f6
Merge branch 'master' into JY-20893-chunk-control-per-update-target
Push
Commit pushed
Copy timestamp to clipboard
2m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job checkout-code
checkout-code
888476
1m 18s
1m 18s
RUNNING job build-frontend
build-frontend
888477
47s
47s
test-frontend
888478
RUNNING job build-backend
build-backend
888479
47s
47s
phpstan
888483
setup
888481
test
888482
test-backend-lint
888480
sonar_cloud
888484
SUCCESS workflow setup-workflow. Collapse the workflow jobs list.
Status Passed Success
Success
setup-workflow
setup-workflow
SETUP
JY-20893-chunk-control-per-update-target
JY-20893-chunk-control-per-update-target
Open commit on version control site
fb4a7f6
Merge branch 'master' into JY-20893-chunk-control-per-update-target
Push
Commit pushed
Copy timestamp to clipboard
3m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job setup
setup
888474
37s
37s
app
58488
58488
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
12m 14s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20920-fix-participant-matcher
JY-20920-fix-participant-matcher
Open commit on version control site
eb6cfc4
JY-20920: Fix participant matcher
Push
Commit pushed
Copy timestamp to clipboard
13m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job checkout-code
checkout-code
888465
2m 0s
2m 0s
SUCCESS job build-frontend
build-frontend
888469
1m 31s...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51634
|
1813
|
5
|
2026-05-18T08:51:40.846582+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094300846_m1.jpg...
|
Firefox
|
Pipelines - jiminny/app — Work
|
1
|
app.circleci.com/pipelines/github/jiminny/app/5848 app.circleci.com/pipelines/github/jiminny/app/58486/workflows/60b2acd9-bcff-46eb-80d0-2b2ef2ad9d03/jobs/888432...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
Project Outline app
app
app
app
Overview
Overview
Settings
Settings
Deploys
Deploys
Lightning Manage triggers
Manage triggers
Trigger Pipeline
Pipelines All pipelines my-pipelines-filter
All pipelines
app Project Filter. Selected "app"
app
All branches Branch Filter. Selected "All branches"
All branches
Start Time Cutoff date Arrow Drop Down
Cutoff date
All statuses Arrow Drop Down
All
statuses
Filter Display options
Display options
Pipeline
Status
Workflow
Checkout source
Trigger event
Start
Duration
Actions
app
58490
58490
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
23m 13s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Open commit on version control site
d94a285
Merge branch 'master' into JY-20808-low-priority-indexing-queue
Push
Commit pushed
Copy timestamp to clipboard
2m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job checkout-code
checkout-code
888485
1m 22s
1m 22s
RUNNING job build-frontend
build-frontend
888486
7s
7s
test-frontend
888487
RUNNING job build-backend
build-backend
888488
7s
7s
phpstan
888492
setup
888490
test
888491
test-backend-lint
888489
sonar_cloud
888493
SUCCESS workflow setup-workflow. Collapse the workflow jobs list.
Status Passed Success
Success
setup-workflow
setup-workflow
SETUP
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Open commit on version control site
d94a285
Merge branch 'master' into JY-20808-low-priority-indexing-queue
Push
Commit pushed
Copy timestamp to clipboard
2m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job setup
setup
888475
56s
56s
app
58489
58489
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
22m 37s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20893-chunk-control-per-update-target
JY-20893-chunk-control-per-update-target
Open commit on version control site
fb4a7f6
Merge branch 'master' into JY-20893-chunk-control-per-update-target
Push
Commit pushed
Copy timestamp to clipboard
2m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job checkout-code
checkout-code
888476
1m 18s
1m 18s
RUNNING job build-frontend
build-frontend
888477
47s
47s
test-frontend
888478
RUNNING job build-backend
build-backend
888479
47s
47s
phpstan
888483
setup
888481
test
888482
test-backend-lint
888480
sonar_cloud
888484
SUCCESS workflow setup-workflow. Collapse the workflow jobs list.
Status Passed Success
Success
setup-workflow
setup-workflow
SETUP
JY-20893-chunk-control-per-update-target
JY-20893-chunk-control-per-update-target
Open commit on version control site
fb4a7f6
Merge branch 'master' into JY-20893-chunk-control-per-update-target
Push
Commit pushed
Copy timestamp to clipboard
3m ago...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Go to home page","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Auto theme","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open notifications","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open support menu","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open user menu","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"org avatar Current organization: jiminny","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Home","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Runners","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Runners","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Org","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Org","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Plan","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Plan","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk sidecars","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk sidecars","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PREVIEW","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard All Pipelines","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Pipelines","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Project Outline app","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"app","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Overview","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Overview","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Lightning Manage triggers","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Manage triggers","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Trigger Pipeline","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pipelines All pipelines my-pipelines-filter","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All pipelines","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"app Project Filter. Selected \"app\"","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"All branches Branch Filter. Selected \"All branches\"","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All branches","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Start Time Cutoff date Arrow Drop Down","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cutoff date","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"All statuses Arrow Drop Down","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"statuses","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filter Display options","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Display options","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pipeline","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Status","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Workflow","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Checkout source","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Trigger event","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Start","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Duration","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actions","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"58490","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"58490","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Status Running Running","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Running","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23m 13s","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"remain","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Info Outline","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"build_accept_deploy","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20808-low-priority-indexing-queue","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20808-low-priority-indexing-queue","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"d94a285","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge branch 'master' into JY-20808-low-priority-indexing-queue","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Push","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit pushed","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2m ago","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp duration to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from start","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from failed","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Cancel workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More Actions","depth":12,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Jobs","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SUCCESS job checkout-code","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"checkout-code","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888485","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1m 22s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m 22s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RUNNING job build-frontend","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build-frontend","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888486","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"7s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test-frontend","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888487","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RUNNING job build-backend","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build-backend","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888488","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"7s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"phpstan","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888492","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888490","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888491","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test-backend-lint","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888489","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sonar_cloud","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888493","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"SUCCESS workflow setup-workflow. Collapse the workflow jobs list.","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Status Passed Success","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Success","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"setup-workflow","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"setup-workflow","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SETUP","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20808-low-priority-indexing-queue","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20808-low-priority-indexing-queue","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"d94a285","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge branch 'master' into JY-20808-low-priority-indexing-queue","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Push","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit pushed","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2m ago","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp duration to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from start","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from failed","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Cancel workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More Actions","depth":12,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Jobs","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SUCCESS job setup","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888475","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"56s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"56s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"58489","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"58489","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Status Running Running","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Running","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22m 37s","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"remain","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Info Outline","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"build_accept_deploy","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20893-chunk-control-per-update-target","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20893-chunk-control-per-update-target","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"fb4a7f6","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge branch 'master' into JY-20893-chunk-control-per-update-target","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Push","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit pushed","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2m ago","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp duration to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from start","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Rerun workflow from failed","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Cancel workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix workflow","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More Actions","depth":12,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Jobs","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SUCCESS job checkout-code","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"checkout-code","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888476","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1m 18s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m 18s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RUNNING job build-frontend","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build-frontend","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888477","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"47s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"47s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test-frontend","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888478","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RUNNING job build-backend","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build-backend","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888479","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"47s","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"47s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"phpstan","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888483","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888481","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888482","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test-backend-lint","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888480","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sonar_cloud","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"888484","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"SUCCESS workflow setup-workflow. Collapse the workflow jobs list.","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Status Passed Success","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Success","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"setup-workflow","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"setup-workflow","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SETUP","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20893-chunk-control-per-update-target","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20893-chunk-control-per-update-target","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"fb4a7f6","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merge branch 'master' into JY-20893-chunk-control-per-update-target","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Push","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit pushed","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3m ago","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
7075467244076990535
|
-8284815025409067375
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
Project Outline app
app
app
app
Overview
Overview
Settings
Settings
Deploys
Deploys
Lightning Manage triggers
Manage triggers
Trigger Pipeline
Pipelines All pipelines my-pipelines-filter
All pipelines
app Project Filter. Selected "app"
app
All branches Branch Filter. Selected "All branches"
All branches
Start Time Cutoff date Arrow Drop Down
Cutoff date
All statuses Arrow Drop Down
All
statuses
Filter Display options
Display options
Pipeline
Status
Workflow
Checkout source
Trigger event
Start
Duration
Actions
app
58490
58490
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
23m 13s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Open commit on version control site
d94a285
Merge branch 'master' into JY-20808-low-priority-indexing-queue
Push
Commit pushed
Copy timestamp to clipboard
2m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job checkout-code
checkout-code
888485
1m 22s
1m 22s
RUNNING job build-frontend
build-frontend
888486
7s
7s
test-frontend
888487
RUNNING job build-backend
build-backend
888488
7s
7s
phpstan
888492
setup
888490
test
888491
test-backend-lint
888489
sonar_cloud
888493
SUCCESS workflow setup-workflow. Collapse the workflow jobs list.
Status Passed Success
Success
setup-workflow
setup-workflow
SETUP
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Open commit on version control site
d94a285
Merge branch 'master' into JY-20808-low-priority-indexing-queue
Push
Commit pushed
Copy timestamp to clipboard
2m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job setup
setup
888475
56s
56s
app
58489
58489
RUNNING workflow build_accept_deploy. Collapse the workflow jobs list.
Status Running Running
Running
22m 37s
remain
Info Outline
build_accept_deploy
build_accept_deploy
JY-20893-chunk-control-per-update-target
JY-20893-chunk-control-per-update-target
Open commit on version control site
fb4a7f6
Merge branch 'master' into JY-20893-chunk-control-per-update-target
Push
Commit pushed
Copy timestamp to clipboard
2m ago
Copy timestamp duration to clipboard
Rerun workflow from start
Rerun workflow from failed
Cancel workflow
Fix workflow
More Actions
Jobs
SUCCESS job checkout-code
checkout-code
888476
1m 18s
1m 18s
RUNNING job build-frontend
build-frontend
888477
47s
47s
test-frontend
888478
RUNNING job build-backend
build-backend
888479
47s
47s
phpstan
888483
setup
888481
test
888482
test-backend-lint
888480
sonar_cloud
888484
SUCCESS workflow setup-workflow. Collapse the workflow jobs list.
Status Passed Success
Success
setup-workflow
setup-workflow
SETUP
JY-20893-chunk-control-per-update-target
JY-20893-chunk-control-per-update-target
Open commit on version control site
fb4a7f6
Merge branch 'master' into JY-20893-chunk-control-per-update-target
Push
Commit pushed
Copy timestamp to clipboard
3m ago...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51635
|
1814
|
9
|
2026-05-18T08:51:43.446311+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094303446_m2.jpg...
|
Firefox
|
test (888432) - jiminny/app — Work
|
1
|
app.circleci.com/pipelines/github/jiminny/app/5848 app.circleci.com/pipelines/github/jiminny/app/58486/workflows/60b2acd9-bcff-46eb-80d0-2b2ef2ad9d03/jobs/888432...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Failed Run PHPunit tests
Run PHPunit tests
7m 19s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Fix error (Beta)
Explain error
#!/bin/bash -eo pipefail
export
SYMFONY_DEPRECATIONS_HELPER=weak
echo
-e
"\nxdebug.mode=coverage\nxdebug.coverage_output_dir=/home/circleci/project\nzend_extension=xdebug.so\n"
>> /usr/
local
/etc/php/conf.d/docker-php-ext-xdebug.ini
vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml
CircleCI received
exit
code 2
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.042719416,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1590758,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"test (888432) - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"test (888432) - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.048038565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.18994413,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.21707901,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Go to home page","depth":9,"bounds":{"left":0.08726729,"top":0.061452515,"width":0.044215426,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Auto theme","depth":9,"bounds":{"left":0.9375,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open notifications","depth":9,"bounds":{"left":0.95212764,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open support menu","depth":9,"bounds":{"left":0.96675533,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open user menu","depth":9,"bounds":{"left":0.98138297,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"org avatar Current organization: jiminny","depth":9,"bounds":{"left":0.08693484,"top":0.10295291,"width":0.01462766,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Home","depth":10,"bounds":{"left":0.08494016,"top":0.15083799,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":12,"bounds":{"left":0.087765954,"top":0.1839585,"width":0.012965426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines","depth":10,"bounds":{"left":0.08494016,"top":0.21308859,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines","depth":12,"bounds":{"left":0.083942816,"top":0.2462091,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":10,"bounds":{"left":0.08494016,"top":0.2753392,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":12,"bounds":{"left":0.0852726,"top":0.3084597,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":10,"bounds":{"left":0.08494016,"top":0.33798882,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":12,"bounds":{"left":0.08543883,"top":0.37071028,"width":0.01761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":10,"bounds":{"left":0.08494016,"top":0.40023944,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":12,"bounds":{"left":0.085605055,"top":0.4329609,"width":0.017287234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Runners","depth":10,"bounds":{"left":0.08494016,"top":0.46249002,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Runners","depth":12,"bounds":{"left":0.0852726,"top":0.49561054,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Org","depth":10,"bounds":{"left":0.08494016,"top":0.52474064,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Org","depth":12,"bounds":{"left":0.090259306,"top":0.55786115,"width":0.007978723,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Plan","depth":10,"bounds":{"left":0.08494016,"top":0.58699125,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Plan","depth":12,"bounds":{"left":0.08959442,"top":0.6201117,"width":0.00930851,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk sidecars","depth":11,"bounds":{"left":0.07962101,"top":0.8591381,"width":0.02925532,"height":0.059457302},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk sidecars","depth":13,"bounds":{"left":0.08494016,"top":0.8922586,"width":0.01861702,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PREVIEW","depth":12,"bounds":{"left":0.08743351,"top":0.8567438,"width":0.013630319,"height":0.009177973},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk","depth":10,"bounds":{"left":0.07962101,"top":0.9345571,"width":0.02925532,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk","depth":12,"bounds":{"left":0.08726729,"top":0.96727854,"width":0.013962766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard All Pipelines","depth":15,"bounds":{"left":0.1171875,"top":0.12290503,"width":0.040724736,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Pipelines","depth":17,"bounds":{"left":0.1278258,"top":0.12490024,"width":0.030086435,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.15924202,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Project Outline app","depth":15,"bounds":{"left":0.16356383,"top":0.12290503,"width":0.020113032,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":17,"bounds":{"left":0.17420213,"top":0.12490024,"width":0.009474734,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.18500665,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Git Branch JY-20613-allow-owner-role-on-team-setup","depth":15,"bounds":{"left":0.18932846,"top":0.12290503,"width":0.12017952,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":17,"bounds":{"left":0.19996676,"top":0.12490024,"width":0.10954122,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.31083778,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines app #58486","depth":15,"bounds":{"left":0.3151596,"top":0.12290503,"width":0.04138963,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app #58486","depth":17,"bounds":{"left":0.3257979,"top":0.12490024,"width":0.030751329,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.35787898,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Workflows build_accept_deploy","depth":15,"bounds":{"left":0.3622008,"top":0.12290503,"width":0.06200133,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":17,"bounds":{"left":0.3728391,"top":0.12490024,"width":0.051363032,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.42553192,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jobs test (888432)","depth":15,"bounds":{"left":0.42985374,"top":0.12290503,"width":0.046210106,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"test (888432)","depth":17,"bounds":{"left":0.44049203,"top":0.12490024,"width":0.03557181,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"test","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Failed","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Fix Job","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Rebuild Rerun Arrow Drop Down","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Rerun","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More Actions","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Duration","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/ Finished","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"8m 44s","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8m 44s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m ago","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Queued","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Executor / Resource Class","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Docker","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Learn more about resource classes in the docs (opens in new tab)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ARM X-Large","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Info Outline","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Branch","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20613-allow-owner-role-on-team-setup","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PR /","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"#12092","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"#","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12092","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6fae8bb","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Author","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"& Message","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Avatar of Lukas Kovalik","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Steps","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Steps","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Tests tests","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tests","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Timing timing","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Timing","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Artifacts artifacts","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Artifacts","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Resources resources","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resources","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Spin up environment","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Spin up environment","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container cimg/mariadb:10.9.7","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container cimg/mariadb:10.9.7","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container redis:5","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container redis:5","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Preparing environment variables","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preparing environment variables","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Attaching workspace","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Attaching workspace","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - Composer vendor cache (composer.lock)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - frontend build output (public/, this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - frontend build output (public/, this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - backend workspace cache","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - backend workspace cache","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Edit hosts file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Edit hosts file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed composer install /w dev dependencies","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"composer install /w dev dependencies","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.0,"width":0.87017953,"height":0.044692736},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"bounds":{"left":0.117519945,"top":0.0,"width":0.8103391,"height":0.03830806},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"bounds":{"left":0.1434508,"top":0.0,"width":0.032912236,"height":0.01396648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"bounds":{"left":0.9318484,"top":0.0,"width":0.005319149,"height":0.01556265},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.0,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create jobs table migration","depth":14,"bounds":{"left":0.117519945,"top":0.0,"width":0.8103391,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create jobs table migration","depth":17,"bounds":{"left":0.1434508,"top":0.0003990423,"width":0.06017287,"height":0.01396648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"bounds":{"left":0.9318484,"top":0.0,"width":0.005319149,"height":0.01556265},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.03790902,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database migrations","depth":14,"bounds":{"left":0.117519945,"top":0.041101355,"width":0.80950797,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database migrations","depth":17,"bounds":{"left":0.1434508,"top":0.053072624,"width":0.05518617,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"bounds":{"left":0.9310173,"top":0.05227454,"width":0.006150266,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.044293694,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.044293694,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.044293694,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.0905826,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database seeders","depth":14,"bounds":{"left":0.117519945,"top":0.09377494,"width":0.8100067,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database seeders","depth":17,"bounds":{"left":0.1434508,"top":0.10574621,"width":0.049700797,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7s","depth":15,"bounds":{"left":0.93151593,"top":0.104948126,"width":0.0056515955,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.09696728,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.09696728,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.09696728,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.14325619,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run passport:install migrations","depth":14,"bounds":{"left":0.117519945,"top":0.14644852,"width":0.8096742,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run passport:install migrations","depth":17,"bounds":{"left":0.1434508,"top":0.15841979,"width":0.06881649,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5s","depth":15,"bounds":{"left":0.9311835,"top":0.15762171,"width":0.005984043,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.14964086,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.14964086,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.14964086,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.19592977,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Wait for mysql to become online","depth":14,"bounds":{"left":0.117519945,"top":0.1991221,"width":0.80950797,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Wait for mysql to become online","depth":17,"bounds":{"left":0.1434508,"top":0.21109338,"width":0.07130984,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"bounds":{"left":0.9310173,"top":0.21029529,"width":0.006150266,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.20231445,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.20231445,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.20231445,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.24860336,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create mappings table in db for ElasticSearch indexes","depth":14,"bounds":{"left":0.117519945,"top":0.25179568,"width":0.8103391,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create mappings table in db for ElasticSearch indexes","depth":17,"bounds":{"left":0.1434508,"top":0.26376694,"width":0.1200133,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"bounds":{"left":0.9318484,"top":0.26296887,"width":0.005319149,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.254988,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.254988,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.254988,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.30127692,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create ElasticSearch schema","depth":14,"bounds":{"left":0.117519945,"top":0.3044693,"width":0.80950797,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create ElasticSearch schema","depth":17,"bounds":{"left":0.1434508,"top":0.31644055,"width":0.06499335,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"bounds":{"left":0.9310173,"top":0.31564245,"width":0.006150266,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.30766162,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.30766162,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.30766162,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.35395053,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"bounds":{"left":0.117519945,"top":0.35714287,"width":0.8103391,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"bounds":{"left":0.1434508,"top":0.36911413,"width":0.032912236,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"bounds":{"left":0.9318484,"top":0.36831605,"width":0.005319149,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.3603352,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.3603352,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.3603352,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.4066241,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Failed Run PHPunit tests","depth":14,"bounds":{"left":0.117519945,"top":0.40981644,"width":0.79787236,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Run PHPunit tests","depth":17,"bounds":{"left":0.1434508,"top":0.4217877,"width":0.039893616,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7m 19s","depth":15,"bounds":{"left":0.9193817,"top":0.42098963,"width":0.017785905,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.41300878,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.41300878,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.41300878,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix error (Beta)","depth":14,"bounds":{"left":0.8703458,"top":0.23663208,"width":0.0546875,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Explain error","depth":14,"bounds":{"left":0.92769283,"top":0.23663208,"width":0.04936835,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash -eo pipefail","depth":16,"bounds":{"left":0.12051197,"top":0.28930566,"width":0.06732048,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"export","depth":16,"bounds":{"left":0.12051197,"top":0.30367118,"width":0.016788565,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SYMFONY_DEPRECATIONS_HELPER=weak","depth":16,"bounds":{"left":0.13730054,"top":0.30367118,"width":0.092586435,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"echo","depth":16,"bounds":{"left":0.12051197,"top":0.3180367,"width":0.011136968,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-e","depth":16,"bounds":{"left":0.13164894,"top":0.3180367,"width":0.011303191,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"\\nxdebug.mode=coverage\\nxdebug.coverage_output_dir=/home/circleci/project\\nzend_extension=xdebug.so\\n\"","depth":16,"bounds":{"left":0.14295213,"top":0.3180367,"width":0.28873006,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":">> /usr/","depth":16,"bounds":{"left":0.43168217,"top":0.3180367,"width":0.025265958,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local","depth":16,"bounds":{"left":0.45694813,"top":0.3180367,"width":0.013962766,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/etc/php/conf.d/docker-php-ext-xdebug.ini","depth":16,"bounds":{"left":0.4709109,"top":0.3180367,"width":0.1178524,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml","depth":16,"bounds":{"left":0.12051197,"top":0.33240223,"width":0.2130984,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CircleCI received","depth":16,"bounds":{"left":0.12051197,"top":0.37390262,"width":0.050531916,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"exit","depth":16,"bounds":{"left":0.17104389,"top":0.37390262,"width":0.011136968,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"code 2","depth":16,"bounds":{"left":0.18218085,"top":0.37390262,"width":0.019614361,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.6492418,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Uploading artifacts","depth":14,"bounds":{"left":0.117519945,"top":0.6524342,"width":0.80950797,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Uploading artifacts","depth":17,"bounds":{"left":0.1434508,"top":0.6644054,"width":0.042386968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
3381881920488586667
|
8036242855121418273
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Failed Run PHPunit tests
Run PHPunit tests
7m 19s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Fix error (Beta)
Explain error
#!/bin/bash -eo pipefail
export
SYMFONY_DEPRECATIONS_HELPER=weak
echo
-e
"\nxdebug.mode=coverage\nxdebug.coverage_output_dir=/home/circleci/project\nzend_extension=xdebug.so\n"
>> /usr/
local
/etc/php/conf.d/docker-php-ext-xdebug.ini
vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml
CircleCI received
exit
code 2
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts...
|
51633
|
NULL
|
NULL
|
NULL
|
|
51636
|
1814
|
10
|
2026-05-18T08:51:46.439194+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094306439_m2.jpg...
|
Firefox
|
test (888432) - jiminny/app — Work
|
1
|
app.circleci.com/pipelines/github/jiminny/app/5848 app.circleci.com/pipelines/github/jiminny/app/58486/workflows/60b2acd9-bcff-46eb-80d0-2b2ef2ad9d03/jobs/888432...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Failed Run PHPunit tests
Run PHPunit tests
7m 19s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Fix error (Beta)
Explain error
#!/bin/bash -eo pipefail
export
SYMFONY_DEPRECATIONS_HELPER=weak
echo
-e
"\nxdebug.mode=coverage\nxdebug.coverage_output_dir=/home/circleci/project\nzend_extension=xdebug.so\n"
>> /usr/
local
/etc/php/conf.d/docker-php-ext-xdebug.ini
vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
Link
225
226
227
Terminal input
CircleCI received
exit
code 2
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
CircleCI...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.042719416,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1590758,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"test (888432) - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"test (888432) - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.048038565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.18994413,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.21707901,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Go to home page","depth":9,"bounds":{"left":0.08726729,"top":0.061452515,"width":0.044215426,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Auto theme","depth":9,"bounds":{"left":0.9375,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open notifications","depth":9,"bounds":{"left":0.95212764,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open support menu","depth":9,"bounds":{"left":0.96675533,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open user menu","depth":9,"bounds":{"left":0.98138297,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"org avatar Current organization: jiminny","depth":9,"bounds":{"left":0.08693484,"top":0.10295291,"width":0.01462766,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Home","depth":10,"bounds":{"left":0.08494016,"top":0.15083799,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":12,"bounds":{"left":0.087765954,"top":0.1839585,"width":0.012965426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines","depth":10,"bounds":{"left":0.08494016,"top":0.21308859,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines","depth":12,"bounds":{"left":0.083942816,"top":0.2462091,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":10,"bounds":{"left":0.08494016,"top":0.2753392,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":12,"bounds":{"left":0.0852726,"top":0.3084597,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":10,"bounds":{"left":0.08494016,"top":0.33798882,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":12,"bounds":{"left":0.08543883,"top":0.37071028,"width":0.01761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":10,"bounds":{"left":0.08494016,"top":0.40023944,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":12,"bounds":{"left":0.085605055,"top":0.4329609,"width":0.017287234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Runners","depth":10,"bounds":{"left":0.08494016,"top":0.46249002,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Runners","depth":12,"bounds":{"left":0.0852726,"top":0.49561054,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Org","depth":10,"bounds":{"left":0.08494016,"top":0.52474064,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Org","depth":12,"bounds":{"left":0.090259306,"top":0.55786115,"width":0.007978723,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Plan","depth":10,"bounds":{"left":0.08494016,"top":0.58699125,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Plan","depth":12,"bounds":{"left":0.08959442,"top":0.6201117,"width":0.00930851,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk sidecars","depth":11,"bounds":{"left":0.07962101,"top":0.8591381,"width":0.02925532,"height":0.059457302},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk sidecars","depth":13,"bounds":{"left":0.08494016,"top":0.8922586,"width":0.01861702,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PREVIEW","depth":12,"bounds":{"left":0.08743351,"top":0.8567438,"width":0.013630319,"height":0.009177973},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk","depth":10,"bounds":{"left":0.07962101,"top":0.9345571,"width":0.02925532,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk","depth":12,"bounds":{"left":0.08726729,"top":0.96727854,"width":0.013962766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard All Pipelines","depth":15,"bounds":{"left":0.1171875,"top":0.12290503,"width":0.040724736,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Pipelines","depth":17,"bounds":{"left":0.1278258,"top":0.12490024,"width":0.030086435,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.15924202,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Project Outline app","depth":15,"bounds":{"left":0.16356383,"top":0.12290503,"width":0.020113032,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":17,"bounds":{"left":0.17420213,"top":0.12490024,"width":0.009474734,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.18500665,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Git Branch JY-20613-allow-owner-role-on-team-setup","depth":15,"bounds":{"left":0.18932846,"top":0.12290503,"width":0.12017952,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":17,"bounds":{"left":0.19996676,"top":0.12490024,"width":0.10954122,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.31083778,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines app #58486","depth":15,"bounds":{"left":0.3151596,"top":0.12290503,"width":0.04138963,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app #58486","depth":17,"bounds":{"left":0.3257979,"top":0.12490024,"width":0.030751329,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.35787898,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Workflows build_accept_deploy","depth":15,"bounds":{"left":0.3622008,"top":0.12290503,"width":0.06200133,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":17,"bounds":{"left":0.3728391,"top":0.12490024,"width":0.051363032,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.42553192,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jobs test (888432)","depth":15,"bounds":{"left":0.42985374,"top":0.12290503,"width":0.046210106,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"test (888432)","depth":17,"bounds":{"left":0.44049203,"top":0.12490024,"width":0.03557181,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"test","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Failed","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Fix Job","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Rebuild Rerun Arrow Drop Down","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Rerun","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More Actions","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Duration","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/ Finished","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"8m 44s","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8m 44s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m ago","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Queued","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Executor / Resource Class","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Docker","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Learn more about resource classes in the docs (opens in new tab)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ARM X-Large","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Info Outline","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Branch","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20613-allow-owner-role-on-team-setup","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PR /","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"#12092","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"#","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12092","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6fae8bb","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Author","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"& Message","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Avatar of Lukas Kovalik","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Steps","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Steps","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Tests tests","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tests","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Timing timing","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Timing","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Artifacts artifacts","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Artifacts","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Resources resources","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resources","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Spin up environment","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Spin up environment","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container cimg/mariadb:10.9.7","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container cimg/mariadb:10.9.7","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container redis:5","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container redis:5","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Preparing environment variables","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preparing environment variables","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Attaching workspace","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Attaching workspace","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - Composer vendor cache (composer.lock)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - frontend build output (public/, this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - frontend build output (public/, this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - backend workspace cache","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - backend workspace cache","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Edit hosts file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Edit hosts file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed composer install /w dev dependencies","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"composer install /w dev dependencies","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.0,"width":0.87017953,"height":0.044692736},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"bounds":{"left":0.117519945,"top":0.0,"width":0.8103391,"height":0.03830806},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"bounds":{"left":0.1434508,"top":0.0,"width":0.032912236,"height":0.01396648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"bounds":{"left":0.9318484,"top":0.0,"width":0.005319149,"height":0.01556265},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.0,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create jobs table migration","depth":14,"bounds":{"left":0.117519945,"top":0.0,"width":0.8103391,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create jobs table migration","depth":17,"bounds":{"left":0.1434508,"top":0.0015961692,"width":0.06017287,"height":0.01396648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"bounds":{"left":0.9318484,"top":0.0007980846,"width":0.005319149,"height":0.01556265},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.039106146,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database migrations","depth":14,"bounds":{"left":0.117519945,"top":0.042298485,"width":0.80950797,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database migrations","depth":17,"bounds":{"left":0.1434508,"top":0.054269753,"width":0.05518617,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"bounds":{"left":0.9310173,"top":0.05347167,"width":0.006150266,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.045490824,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.045490824,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.045490824,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.09177973,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database seeders","depth":14,"bounds":{"left":0.117519945,"top":0.09497207,"width":0.8100067,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database seeders","depth":17,"bounds":{"left":0.1434508,"top":0.10694334,"width":0.049700797,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7s","depth":15,"bounds":{"left":0.93151593,"top":0.10614525,"width":0.0056515955,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.0981644,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.0981644,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.0981644,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.14445332,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run passport:install migrations","depth":14,"bounds":{"left":0.117519945,"top":0.14764565,"width":0.8096742,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run passport:install migrations","depth":17,"bounds":{"left":0.1434508,"top":0.15961692,"width":0.06881649,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5s","depth":15,"bounds":{"left":0.9311835,"top":0.15881884,"width":0.005984043,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.15083799,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.15083799,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.15083799,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.1971269,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Wait for mysql to become online","depth":14,"bounds":{"left":0.117519945,"top":0.20031923,"width":0.80950797,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Wait for mysql to become online","depth":17,"bounds":{"left":0.1434508,"top":0.2122905,"width":0.07130984,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"bounds":{"left":0.9310173,"top":0.21149242,"width":0.006150266,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.20351157,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.20351157,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.20351157,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.24980047,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create mappings table in db for ElasticSearch indexes","depth":14,"bounds":{"left":0.117519945,"top":0.2529928,"width":0.8103391,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create mappings table in db for ElasticSearch indexes","depth":17,"bounds":{"left":0.1434508,"top":0.26496407,"width":0.1200133,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"bounds":{"left":0.9318484,"top":0.264166,"width":0.005319149,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.25618514,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.25618514,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.25618514,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.30247405,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create ElasticSearch schema","depth":14,"bounds":{"left":0.117519945,"top":0.3056664,"width":0.80950797,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create ElasticSearch schema","depth":17,"bounds":{"left":0.1434508,"top":0.31763768,"width":0.06499335,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"bounds":{"left":0.9310173,"top":0.31683958,"width":0.006150266,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.30885875,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.30885875,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.30885875,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.35514766,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"bounds":{"left":0.117519945,"top":0.35834,"width":0.8103391,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"bounds":{"left":0.1434508,"top":0.37031126,"width":0.032912236,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"bounds":{"left":0.9318484,"top":0.36951315,"width":0.005319149,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.36153233,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.36153233,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.36153233,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.40782124,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Failed Run PHPunit tests","depth":14,"bounds":{"left":0.117519945,"top":0.41101357,"width":0.79787236,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Run PHPunit tests","depth":17,"bounds":{"left":0.1434508,"top":0.42298484,"width":0.039893616,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7m 19s","depth":15,"bounds":{"left":0.9193817,"top":0.42218676,"width":0.017785905,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.4142059,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.4142059,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.4142059,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix error (Beta)","depth":14,"bounds":{"left":0.8756649,"top":0.46528333,"width":0.0546875,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Explain error","depth":14,"bounds":{"left":0.93301195,"top":0.46528333,"width":0.04936835,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash -eo pipefail","depth":16,"bounds":{"left":0.12583111,"top":0.5179569,"width":0.06732048,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"export","depth":16,"bounds":{"left":0.12583111,"top":0.5323224,"width":0.016788565,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SYMFONY_DEPRECATIONS_HELPER=weak","depth":16,"bounds":{"left":0.14261968,"top":0.5323224,"width":0.092586435,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"echo","depth":16,"bounds":{"left":0.12583111,"top":0.54668796,"width":0.011136968,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-e","depth":16,"bounds":{"left":0.13696809,"top":0.54668796,"width":0.011303191,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"\\nxdebug.mode=coverage\\nxdebug.coverage_output_dir=/home/circleci/project\\nzend_extension=xdebug.so\\n\"","depth":16,"bounds":{"left":0.14827128,"top":0.54668796,"width":0.28873006,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":">> /usr/","depth":16,"bounds":{"left":0.43700132,"top":0.54668796,"width":0.025265958,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local","depth":16,"bounds":{"left":0.46226728,"top":0.54668796,"width":0.013962766,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/etc/php/conf.d/docker-php-ext-xdebug.ini","depth":16,"bounds":{"left":0.47623006,"top":0.54668796,"width":0.1178524,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml","depth":16,"bounds":{"left":0.12583111,"top":0.56105345,"width":0.2130984,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"202","depth":15,"bounds":{"left":0.14178856,"top":0.5877893,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"203","depth":15,"bounds":{"left":0.14178856,"top":0.60215485,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"204","depth":15,"bounds":{"left":0.14178856,"top":0.61652035,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"205","depth":15,"bounds":{"left":0.14178856,"top":0.6308859,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"206","depth":15,"bounds":{"left":0.14178856,"top":0.6452514,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"207","depth":15,"bounds":{"left":0.14178856,"top":0.65961695,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"208","depth":15,"bounds":{"left":0.14178856,"top":0.67398244,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"209","depth":15,"bounds":{"left":0.14178856,"top":0.68834794,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"210","depth":15,"bounds":{"left":0.14178856,"top":0.7027135,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"211","depth":15,"bounds":{"left":0.14178856,"top":0.717079,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"212","depth":15,"bounds":{"left":0.14178856,"top":0.73144454,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"213","depth":15,"bounds":{"left":0.14178856,"top":0.74581003,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"214","depth":15,"bounds":{"left":0.14178856,"top":0.7601756,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"215","depth":15,"bounds":{"left":0.14178856,"top":0.7745411,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"216","depth":15,"bounds":{"left":0.14178856,"top":0.78890663,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"217","depth":15,"bounds":{"left":0.14178856,"top":0.8032721,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"218","depth":15,"bounds":{"left":0.14178856,"top":0.8176377,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"219","depth":15,"bounds":{"left":0.14178856,"top":0.8320032,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"220","depth":15,"bounds":{"left":0.14178856,"top":0.84636873,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"221","depth":15,"bounds":{"left":0.14178856,"top":0.8607342,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"222","depth":15,"bounds":{"left":0.14178856,"top":0.8750998,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"223","depth":15,"bounds":{"left":0.14178856,"top":0.8894653,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"224","depth":15,"bounds":{"left":0.14178856,"top":0.9038308,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Link","depth":14,"bounds":{"left":0.12283909,"top":0.9042298,"width":0.018949468,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"225","depth":15,"bounds":{"left":0.14178856,"top":0.9181963,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"226","depth":15,"bounds":{"left":0.14178856,"top":0.9325619,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"227","depth":15,"bounds":{"left":0.14178856,"top":0.94692737,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextArea","text":"Terminal input","depth":16,"bounds":{"left":0.16007313,"top":1.0,"width":0.0026595744,"height":-0.07422185},"on_screen":false,"help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CircleCI received","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"exit","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"code 2","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Uploading artifacts","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Uploading artifacts","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Uploading artifacts","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Uploading artifacts","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Uploading artifacts","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Uploading artifacts","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Uploading artifacts","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Uploading artifacts","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Uploading artifacts","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Uploading artifacts","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Uploading artifacts","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Uploading artifacts","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CircleCI","depth":8,"bounds":{"left":0.079288565,"top":0.050678372,"width":0.019614361,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
6274610502557054384
|
8036234059028396065
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Failed Run PHPunit tests
Run PHPunit tests
7m 19s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Fix error (Beta)
Explain error
#!/bin/bash -eo pipefail
export
SYMFONY_DEPRECATIONS_HELPER=weak
echo
-e
"\nxdebug.mode=coverage\nxdebug.coverage_output_dir=/home/circleci/project\nzend_extension=xdebug.so\n"
>> /usr/
local
/etc/php/conf.d/docker-php-ext-xdebug.ini
vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
Link
225
226
227
Terminal input
CircleCI received
exit
code 2
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
CircleCI...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51637
|
1813
|
6
|
2026-05-18T08:51:46.730146+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094306730_m1.jpg...
|
Firefox
|
test (888432) - jiminny/app — Work
|
1
|
app.circleci.com/pipelines/github/jiminny/app/5848 app.circleci.com/pipelines/github/jiminny/app/58486/workflows/60b2acd9-bcff-46eb-80d0-2b2ef2ad9d03/jobs/888432...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"test (888432) - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"test (888432) - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Go to home page","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Auto theme","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open notifications","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open support menu","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open user menu","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"org avatar Current organization: jiminny","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Home","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Runners","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Runners","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Org","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Org","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Plan","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Plan","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk sidecars","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk sidecars","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PREVIEW","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard All Pipelines","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Pipelines","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Project Outline app","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Git Branch JY-20613-allow-owner-role-on-team-setup","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines app #58486","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app #58486","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Workflows build_accept_deploy","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jobs test (888432)","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"test (888432)","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"test","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Failed","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Fix Job","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Rebuild Rerun Arrow Drop Down","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Rerun","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More Actions","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Duration","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/ Finished","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"8m 44s","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8m 44s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m ago","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Queued","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Executor / Resource Class","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Docker","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Learn more about resource classes in the docs (opens in new tab)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ARM X-Large","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Info Outline","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Branch","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20613-allow-owner-role-on-team-setup","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PR /","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"#12092","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"#","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12092","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6fae8bb","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Author","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"& Message","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Avatar of Lukas Kovalik","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Steps","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Steps","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Tests tests","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tests","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Timing timing","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Timing","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Artifacts artifacts","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Artifacts","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Resources resources","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resources","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Spin up environment","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Spin up environment","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container cimg/mariadb:10.9.7","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container cimg/mariadb:10.9.7","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container redis:5","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container redis:5","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Preparing environment variables","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preparing environment variables","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Attaching workspace","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Attaching workspace","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - Composer vendor cache (composer.lock)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - frontend build output (public/, this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - frontend build output (public/, this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - backend workspace cache","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - backend workspace cache","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Edit hosts file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Edit hosts file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed composer install /w dev dependencies","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"composer install /w dev dependencies","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create jobs table migration","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create jobs table migration","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database migrations","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database migrations","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database seeders","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database seeders","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7s","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run passport:install migrations","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run passport:install migrations","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5s","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Wait for mysql to become online","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Wait for mysql to become online","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-3342040044771745090
|
8036242855138457633
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output...
|
51634
|
NULL
|
NULL
|
NULL
|
|
51638
|
1814
|
11
|
2026-05-18T08:51:49.513742+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094309513_m2.jpg...
|
Firefox
|
test (888432) - jiminny/app — Work
|
1
|
app.circleci.com/pipelines/github/jiminny/app/5848 app.circleci.com/pipelines/github/jiminny/app/58486/workflows/60b2acd9-bcff-46eb-80d0-2b2ef2ad9d03/jobs/888432...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Failed Run PHPunit tests
Run PHPunit tests
7m 19s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Fix error (Beta)
Explain error
#!/bin/bash -eo pipefail
export
SYMFONY_DEPRECATIONS_HELPER=weak
echo
-e
"\nxdebug.mode=coverage\nxdebug.coverage_output_dir=/home/circleci/project\nzend_extension=xdebug.so\n"
>> /usr/
local
/etc/php/conf.d/docker-php-ext-xdebug.ini
vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
Terminal input
CircleCI received
exit
code 2
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
CircleCI...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.042719416,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1590758,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"test (888432) - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"test (888432) - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.048038565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.18994413,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.21707901,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Go to home page","depth":9,"bounds":{"left":0.08726729,"top":0.061452515,"width":0.044215426,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Auto theme","depth":9,"bounds":{"left":0.9375,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open notifications","depth":9,"bounds":{"left":0.95212764,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open support menu","depth":9,"bounds":{"left":0.96675533,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open user menu","depth":9,"bounds":{"left":0.98138297,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"org avatar Current organization: jiminny","depth":9,"bounds":{"left":0.08693484,"top":0.10295291,"width":0.01462766,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Home","depth":10,"bounds":{"left":0.08494016,"top":0.15083799,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":12,"bounds":{"left":0.087765954,"top":0.1839585,"width":0.012965426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines","depth":10,"bounds":{"left":0.08494016,"top":0.21308859,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines","depth":12,"bounds":{"left":0.083942816,"top":0.2462091,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":10,"bounds":{"left":0.08494016,"top":0.2753392,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":12,"bounds":{"left":0.0852726,"top":0.3084597,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":10,"bounds":{"left":0.08494016,"top":0.33798882,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":12,"bounds":{"left":0.08543883,"top":0.37071028,"width":0.01761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":10,"bounds":{"left":0.08494016,"top":0.40023944,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":12,"bounds":{"left":0.085605055,"top":0.4329609,"width":0.017287234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Runners","depth":10,"bounds":{"left":0.08494016,"top":0.46249002,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Runners","depth":12,"bounds":{"left":0.0852726,"top":0.49561054,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Org","depth":10,"bounds":{"left":0.08494016,"top":0.52474064,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Org","depth":12,"bounds":{"left":0.090259306,"top":0.55786115,"width":0.007978723,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Plan","depth":10,"bounds":{"left":0.08494016,"top":0.58699125,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Plan","depth":12,"bounds":{"left":0.08959442,"top":0.6201117,"width":0.00930851,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk sidecars","depth":11,"bounds":{"left":0.07962101,"top":0.8591381,"width":0.02925532,"height":0.059457302},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk sidecars","depth":13,"bounds":{"left":0.08494016,"top":0.8922586,"width":0.01861702,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PREVIEW","depth":12,"bounds":{"left":0.08743351,"top":0.8567438,"width":0.013630319,"height":0.009177973},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk","depth":10,"bounds":{"left":0.07962101,"top":0.9345571,"width":0.02925532,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk","depth":12,"bounds":{"left":0.08726729,"top":0.96727854,"width":0.013962766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard All Pipelines","depth":15,"bounds":{"left":0.1171875,"top":0.12290503,"width":0.040724736,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Pipelines","depth":17,"bounds":{"left":0.1278258,"top":0.12490024,"width":0.030086435,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.15924202,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Project Outline app","depth":15,"bounds":{"left":0.16356383,"top":0.12290503,"width":0.020113032,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":17,"bounds":{"left":0.17420213,"top":0.12490024,"width":0.009474734,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.18500665,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Git Branch JY-20613-allow-owner-role-on-team-setup","depth":15,"bounds":{"left":0.18932846,"top":0.12290503,"width":0.12017952,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":17,"bounds":{"left":0.19996676,"top":0.12490024,"width":0.10954122,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.31083778,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines app #58486","depth":15,"bounds":{"left":0.3151596,"top":0.12290503,"width":0.04138963,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app #58486","depth":17,"bounds":{"left":0.3257979,"top":0.12490024,"width":0.030751329,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.35787898,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Workflows build_accept_deploy","depth":15,"bounds":{"left":0.3622008,"top":0.12290503,"width":0.06200133,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":17,"bounds":{"left":0.3728391,"top":0.12490024,"width":0.051363032,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.42553192,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jobs test (888432)","depth":15,"bounds":{"left":0.42985374,"top":0.12290503,"width":0.046210106,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"test (888432)","depth":17,"bounds":{"left":0.44049203,"top":0.12490024,"width":0.03557181,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"test","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Failed","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Fix Job","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Rebuild Rerun Arrow Drop Down","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Rerun","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More Actions","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Duration","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/ Finished","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"8m 44s","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8m 44s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m ago","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Queued","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Executor / Resource Class","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Docker","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Learn more about resource classes in the docs (opens in new tab)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ARM X-Large","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Info Outline","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Branch","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20613-allow-owner-role-on-team-setup","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PR /","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"#12092","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"#","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12092","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6fae8bb","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Author","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"& Message","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Avatar of Lukas Kovalik","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Steps","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Steps","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Tests tests","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tests","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Timing timing","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Timing","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Artifacts artifacts","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Artifacts","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Resources resources","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resources","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Spin up environment","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Spin up environment","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container cimg/mariadb:10.9.7","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container cimg/mariadb:10.9.7","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container redis:5","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container redis:5","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Preparing environment variables","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preparing environment variables","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Attaching workspace","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Attaching workspace","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - Composer vendor cache (composer.lock)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - frontend build output (public/, this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - frontend build output (public/, this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - backend workspace cache","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - backend workspace cache","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Edit hosts file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Edit hosts file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed composer install /w dev dependencies","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"composer install /w dev dependencies","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create jobs table migration","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create jobs table migration","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database migrations","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database migrations","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database seeders","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database seeders","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run passport:install migrations","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run passport:install migrations","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Wait for mysql to become online","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Wait for mysql to become online","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create mappings table in db for ElasticSearch indexes","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create mappings table in db for ElasticSearch indexes","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create ElasticSearch schema","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create ElasticSearch schema","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.0,"width":0.87017953,"height":0.044692736},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"bounds":{"left":0.117519945,"top":0.0,"width":0.8103391,"height":0.03830806},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"bounds":{"left":0.1434508,"top":0.0,"width":0.032912236,"height":0.01396648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"bounds":{"left":0.9318484,"top":0.0,"width":0.005319149,"height":0.01556265},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.103751,"width":0.87017953,"height":0.045490824},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Failed Run PHPunit tests","depth":14,"bounds":{"left":0.117519945,"top":0.10774142,"width":0.79787236,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Run PHPunit tests","depth":17,"bounds":{"left":0.1434508,"top":0.12011173,"width":0.039893616,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7m 19s","depth":15,"bounds":{"left":0.9193817,"top":0.11931365,"width":0.017785905,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.11093376,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.11093376,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.11093376,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix error (Beta)","depth":14,"bounds":{"left":0.8756649,"top":0.022346368,"width":0.0546875,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Explain error","depth":14,"bounds":{"left":0.93301195,"top":0.022346368,"width":0.04936835,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash -eo pipefail","depth":16,"bounds":{"left":0.12583111,"top":0.075019956,"width":0.06732048,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"export","depth":16,"bounds":{"left":0.12583111,"top":0.08938547,"width":0.016788565,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SYMFONY_DEPRECATIONS_HELPER=weak","depth":16,"bounds":{"left":0.14261968,"top":0.08938547,"width":0.092586435,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"echo","depth":16,"bounds":{"left":0.12583111,"top":0.103751,"width":0.011136968,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-e","depth":16,"bounds":{"left":0.13696809,"top":0.103751,"width":0.011303191,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"\\nxdebug.mode=coverage\\nxdebug.coverage_output_dir=/home/circleci/project\\nzend_extension=xdebug.so\\n\"","depth":16,"bounds":{"left":0.14827128,"top":0.103751,"width":0.28873006,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":">> /usr/","depth":16,"bounds":{"left":0.43700132,"top":0.103751,"width":0.025265958,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local","depth":16,"bounds":{"left":0.46226728,"top":0.103751,"width":0.013962766,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/etc/php/conf.d/docker-php-ext-xdebug.ini","depth":16,"bounds":{"left":0.47623006,"top":0.103751,"width":0.1178524,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml","depth":16,"bounds":{"left":0.12583111,"top":0.11811652,"width":0.2130984,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"202","depth":15,"bounds":{"left":0.14178856,"top":0.14485236,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"203","depth":15,"bounds":{"left":0.14178856,"top":0.15921788,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"204","depth":15,"bounds":{"left":0.14178856,"top":0.1735834,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"205","depth":15,"bounds":{"left":0.14178856,"top":0.18794893,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"206","depth":15,"bounds":{"left":0.14178856,"top":0.20231445,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"207","depth":15,"bounds":{"left":0.14178856,"top":0.21667998,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"208","depth":15,"bounds":{"left":0.14178856,"top":0.23104548,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"209","depth":15,"bounds":{"left":0.14178856,"top":0.24541101,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"210","depth":15,"bounds":{"left":0.14178856,"top":0.25977653,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"211","depth":15,"bounds":{"left":0.14178856,"top":0.27414206,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"212","depth":15,"bounds":{"left":0.14178856,"top":0.28850758,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"213","depth":15,"bounds":{"left":0.14178856,"top":0.3028731,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"214","depth":15,"bounds":{"left":0.14178856,"top":0.31723863,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"215","depth":15,"bounds":{"left":0.14178856,"top":0.33160415,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"216","depth":15,"bounds":{"left":0.14178856,"top":0.34596968,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"217","depth":15,"bounds":{"left":0.14178856,"top":0.3603352,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"218","depth":15,"bounds":{"left":0.14178856,"top":0.37470073,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"219","depth":15,"bounds":{"left":0.14178856,"top":0.38906625,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"220","depth":15,"bounds":{"left":0.14178856,"top":0.40343177,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"221","depth":15,"bounds":{"left":0.14178856,"top":0.4177973,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"222","depth":15,"bounds":{"left":0.14178856,"top":0.43216282,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"223","depth":15,"bounds":{"left":0.14178856,"top":0.44652835,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"224","depth":15,"bounds":{"left":0.14178856,"top":0.46089387,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"225","depth":15,"bounds":{"left":0.14178856,"top":0.47525936,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"226","depth":15,"bounds":{"left":0.14178856,"top":0.4896249,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"227","depth":15,"bounds":{"left":0.14178856,"top":0.5039904,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextArea","text":"Terminal input","depth":16,"bounds":{"left":0.16007313,"top":0.6312849,"width":0.0026595744,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"CircleCI received","depth":16,"bounds":{"left":0.12583111,"top":0.6895451,"width":0.050531916,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"exit","depth":16,"bounds":{"left":0.17636304,"top":0.6895451,"width":0.011136968,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"code 2","depth":16,"bounds":{"left":0.1875,"top":0.6895451,"width":0.019614361,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.73743016,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Uploading artifacts","depth":14,"bounds":{"left":0.117519945,"top":0.7406225,"width":0.80950797,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Uploading artifacts","depth":17,"bounds":{"left":0.1434508,"top":0.75259376,"width":0.042386968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"bounds":{"left":0.9310173,"top":0.7517957,"width":0.006150266,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.7438148,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.7438148,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.7438148,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.79010373,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Uploading artifacts","depth":14,"bounds":{"left":0.117519945,"top":0.7932961,"width":0.80950797,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Uploading artifacts","depth":17,"bounds":{"left":0.1434508,"top":0.80526733,"width":0.042386968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"bounds":{"left":0.9310173,"top":0.8044693,"width":0.006150266,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.7964884,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.7964884,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.7964884,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.8427773,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Uploading artifacts","depth":14,"bounds":{"left":0.117519945,"top":0.8459697,"width":0.80950797,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Uploading artifacts","depth":17,"bounds":{"left":0.1434508,"top":0.8579409,"width":0.042386968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"bounds":{"left":0.9310173,"top":0.85714287,"width":0.006150266,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.849162,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.849162,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.849162,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.8954509,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Uploading artifacts","depth":14,"bounds":{"left":0.117519945,"top":0.89864326,"width":0.80950797,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Uploading artifacts","depth":17,"bounds":{"left":0.1434508,"top":0.91061455,"width":0.042386968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"bounds":{"left":0.9310173,"top":0.90981644,"width":0.006150266,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.9018356,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.9018356,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.9018356,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.9481245,"width":0.87017953,"height":0.044692736},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Uploading artifacts","depth":14,"bounds":{"left":0.117519945,"top":0.95131683,"width":0.80950797,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Uploading artifacts","depth":17,"bounds":{"left":0.1434508,"top":0.9632881,"width":0.042386968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"bounds":{"left":0.9310173,"top":0.96249,"width":0.006150266,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.9545092,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.9545092,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.9545092,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":1.0,"width":0.87017953,"height":-0.0007981062},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Uploading artifacts","depth":14,"bounds":{"left":0.117519945,"top":1.0,"width":0.80950797,"height":-0.0039904118},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Uploading artifacts","depth":17,"bounds":{"left":0.1434508,"top":1.0,"width":0.042386968,"height":-0.015961647},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"bounds":{"left":0.9310173,"top":1.0,"width":0.006150266,"height":-0.01516366},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":1.0,"width":0.013297873,"height":-0.0071827173},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":1.0,"width":0.013297873,"height":-0.0071827173},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":1.0,"width":0.013297873,"height":-0.0071827173},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CircleCI","depth":8,"bounds":{"left":0.079288565,"top":0.050678372,"width":0.019614361,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
6619232093278418438
|
8036234059028396065
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Failed Run PHPunit tests
Run PHPunit tests
7m 19s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Fix error (Beta)
Explain error
#!/bin/bash -eo pipefail
export
SYMFONY_DEPRECATIONS_HELPER=weak
echo
-e
"\nxdebug.mode=coverage\nxdebug.coverage_output_dir=/home/circleci/project\nzend_extension=xdebug.so\n"
>> /usr/
local
/etc/php/conf.d/docker-php-ext-xdebug.ini
vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
Terminal input
CircleCI received
exit
code 2
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Uploading artifacts 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Uploading artifacts
Uploading artifacts
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
CircleCI...
|
51636
|
NULL
|
NULL
|
NULL
|
|
51639
|
1813
|
7
|
2026-05-18T08:51:51.396810+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094311396_m1.jpg...
|
Firefox
|
test (888432) - jiminny/app — Work
|
1
|
app.circleci.com/pipelines/github/jiminny/app/5848 app.circleci.com/pipelines/github/jiminny/app/58486/workflows/60b2acd9-bcff-46eb-80d0-2b2ef2ad9d03/jobs/888432...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Failed Run PHPunit tests
Run PHPunit tests
7m 19s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Fix error (Beta)
Explain error
#!/bin/bash -eo pipefail
export
SYMFONY_DEPRECATIONS_HELPER=weak
echo
-e
"\nxdebug.mode=coverage\nxdebug.coverage_output_dir=/home/circleci/project\nzend_extension=xdebug.so\n"
>> /usr/
local
/etc/php/conf.d/docker-php-ext-xdebug.ini
vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml
202
203
204
205
206
207
208
209
210...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"test (888432) - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"test (888432) - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Go to home page","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Auto theme","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open notifications","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open support menu","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open user menu","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"org avatar Current organization: jiminny","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Home","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Runners","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Runners","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Org","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Org","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Plan","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Plan","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk sidecars","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk sidecars","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PREVIEW","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard All Pipelines","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Pipelines","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Project Outline app","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Git Branch JY-20613-allow-owner-role-on-team-setup","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines app #58486","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app #58486","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Workflows build_accept_deploy","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jobs test (888432)","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"test (888432)","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"test","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Failed","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Fix Job","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Rebuild Rerun Arrow Drop Down","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Rerun","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More Actions","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Duration","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/ Finished","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"8m 44s","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8m 44s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m ago","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Queued","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Executor / Resource Class","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Docker","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Learn more about resource classes in the docs (opens in new tab)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ARM X-Large","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Info Outline","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Branch","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20613-allow-owner-role-on-team-setup","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PR /","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"#12092","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"#","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12092","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6fae8bb","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Author","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"& Message","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Avatar of Lukas Kovalik","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Steps","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Steps","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Tests tests","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tests","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Timing timing","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Timing","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Artifacts artifacts","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Artifacts","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Resources resources","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resources","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Spin up environment","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Spin up environment","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container cimg/mariadb:10.9.7","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container cimg/mariadb:10.9.7","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container redis:5","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container redis:5","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Preparing environment variables","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preparing environment variables","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Attaching workspace","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Attaching workspace","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - Composer vendor cache (composer.lock)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - frontend build output (public/, this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - frontend build output (public/, this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - backend workspace cache","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - backend workspace cache","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Edit hosts file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Edit hosts file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed composer install /w dev dependencies","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"composer install /w dev dependencies","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create jobs table migration","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create jobs table migration","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database migrations","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database migrations","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database seeders","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database seeders","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run passport:install migrations","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run passport:install migrations","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Wait for mysql to become online","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Wait for mysql to become online","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create mappings table in db for ElasticSearch indexes","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create mappings table in db for ElasticSearch indexes","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create ElasticSearch schema","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create ElasticSearch schema","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Failed Run PHPunit tests","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Run PHPunit tests","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7m 19s","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix error (Beta)","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Explain error","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash -eo pipefail","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"export","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SYMFONY_DEPRECATIONS_HELPER=weak","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"echo","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-e","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"\\nxdebug.mode=coverage\\nxdebug.coverage_output_dir=/home/circleci/project\\nzend_extension=xdebug.so\\n\"","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":">> /usr/","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/etc/php/conf.d/docker-php-ext-xdebug.ini","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"202","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"203","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"204","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"205","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"206","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"207","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"208","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"209","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"210","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8350082637541556175
|
8036242855121418273
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Failed Run PHPunit tests
Run PHPunit tests
7m 19s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Fix error (Beta)
Explain error
#!/bin/bash -eo pipefail
export
SYMFONY_DEPRECATIONS_HELPER=weak
echo
-e
"\nxdebug.mode=coverage\nxdebug.coverage_output_dir=/home/circleci/project\nzend_extension=xdebug.so\n"
>> /usr/
local
/etc/php/conf.d/docker-php-ext-xdebug.ini
vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml
202
203
204
205
206
207
208
209
210...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51640
|
1814
|
12
|
2026-05-18T08:51:51.421504+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094311421_m2.jpg...
|
Firefox
|
test (888432) - jiminny/app — Work
|
1
|
app.circleci.com/pipelines/github/jiminny/app/5848 app.circleci.com/pipelines/github/jiminny/app/58486/workflows/60b2acd9-bcff-46eb-80d0-2b2ef2ad9d03/jobs/888432...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Failed Run PHPunit tests
Run PHPunit tests
7m 19s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Fix error (Beta)
Explain error
#!/bin/bash -eo pipefail
export
SYMFONY_DEPRECATIONS_HELPER=weak
echo
-e
"\nxdebug.mode=coverage\nxdebug.coverage_output_dir=/home/circleci/project\nzend_extension=xdebug.so\n"
>> /usr/
local
/etc/php/conf.d/docker-php-ext-xdebug.ini
vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.042719416,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1590758,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"test (888432) - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"test (888432) - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.048038565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.18994413,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.21707901,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Go to home page","depth":9,"bounds":{"left":0.08726729,"top":0.061452515,"width":0.044215426,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Auto theme","depth":9,"bounds":{"left":0.9375,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open notifications","depth":9,"bounds":{"left":0.95212764,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open support menu","depth":9,"bounds":{"left":0.96675533,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open user menu","depth":9,"bounds":{"left":0.98138297,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"org avatar Current organization: jiminny","depth":9,"bounds":{"left":0.08693484,"top":0.10295291,"width":0.01462766,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Home","depth":10,"bounds":{"left":0.08494016,"top":0.15083799,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":12,"bounds":{"left":0.087765954,"top":0.1839585,"width":0.012965426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines","depth":10,"bounds":{"left":0.08494016,"top":0.21308859,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines","depth":12,"bounds":{"left":0.083942816,"top":0.2462091,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":10,"bounds":{"left":0.08494016,"top":0.2753392,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":12,"bounds":{"left":0.0852726,"top":0.3084597,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":10,"bounds":{"left":0.08494016,"top":0.33798882,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":12,"bounds":{"left":0.08543883,"top":0.37071028,"width":0.01761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":10,"bounds":{"left":0.08494016,"top":0.40023944,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":12,"bounds":{"left":0.085605055,"top":0.4329609,"width":0.017287234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Runners","depth":10,"bounds":{"left":0.08494016,"top":0.46249002,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Runners","depth":12,"bounds":{"left":0.0852726,"top":0.49561054,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Org","depth":10,"bounds":{"left":0.08494016,"top":0.52474064,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Org","depth":12,"bounds":{"left":0.090259306,"top":0.55786115,"width":0.007978723,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Plan","depth":10,"bounds":{"left":0.08494016,"top":0.58699125,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Plan","depth":12,"bounds":{"left":0.08959442,"top":0.6201117,"width":0.00930851,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk sidecars","depth":11,"bounds":{"left":0.07962101,"top":0.8591381,"width":0.02925532,"height":0.059457302},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk sidecars","depth":13,"bounds":{"left":0.08494016,"top":0.8922586,"width":0.01861702,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PREVIEW","depth":12,"bounds":{"left":0.08743351,"top":0.8567438,"width":0.013630319,"height":0.009177973},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk","depth":10,"bounds":{"left":0.07962101,"top":0.9345571,"width":0.02925532,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk","depth":12,"bounds":{"left":0.08726729,"top":0.96727854,"width":0.013962766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard All Pipelines","depth":15,"bounds":{"left":0.1171875,"top":0.12290503,"width":0.040724736,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Pipelines","depth":17,"bounds":{"left":0.1278258,"top":0.12490024,"width":0.030086435,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.15924202,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Project Outline app","depth":15,"bounds":{"left":0.16356383,"top":0.12290503,"width":0.020113032,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":17,"bounds":{"left":0.17420213,"top":0.12490024,"width":0.009474734,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.18500665,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Git Branch JY-20613-allow-owner-role-on-team-setup","depth":15,"bounds":{"left":0.18932846,"top":0.12290503,"width":0.12017952,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":17,"bounds":{"left":0.19996676,"top":0.12490024,"width":0.10954122,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.31083778,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines app #58486","depth":15,"bounds":{"left":0.3151596,"top":0.12290503,"width":0.04138963,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app #58486","depth":17,"bounds":{"left":0.3257979,"top":0.12490024,"width":0.030751329,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.35787898,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Workflows build_accept_deploy","depth":15,"bounds":{"left":0.3622008,"top":0.12290503,"width":0.06200133,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":17,"bounds":{"left":0.3728391,"top":0.12490024,"width":0.051363032,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.42553192,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jobs test (888432)","depth":15,"bounds":{"left":0.42985374,"top":0.12290503,"width":0.046210106,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"test (888432)","depth":17,"bounds":{"left":0.44049203,"top":0.12490024,"width":0.03557181,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"test","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Failed","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Fix Job","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Rebuild Rerun Arrow Drop Down","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Rerun","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More Actions","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Duration","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/ Finished","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"8m 44s","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8m 44s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m ago","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Queued","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Executor / Resource Class","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Docker","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Learn more about resource classes in the docs (opens in new tab)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ARM X-Large","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Info Outline","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Branch","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20613-allow-owner-role-on-team-setup","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PR /","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"#12092","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"#","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12092","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6fae8bb","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Author","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"& Message","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Avatar of Lukas Kovalik","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Steps","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Steps","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Tests tests","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tests","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Timing timing","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Timing","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Artifacts artifacts","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Artifacts","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Resources resources","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resources","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Spin up environment","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Spin up environment","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container cimg/mariadb:10.9.7","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container cimg/mariadb:10.9.7","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container redis:5","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container redis:5","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Preparing environment variables","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preparing environment variables","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Attaching workspace","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Attaching workspace","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - Composer vendor cache (composer.lock)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - frontend build output (public/, this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - frontend build output (public/, this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - backend workspace cache","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - backend workspace cache","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Edit hosts file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Edit hosts file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed composer install /w dev dependencies","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"composer install /w dev dependencies","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create jobs table migration","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create jobs table migration","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database migrations","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database migrations","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database seeders","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database seeders","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run passport:install migrations","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run passport:install migrations","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Wait for mysql to become online","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Wait for mysql to become online","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create mappings table in db for ElasticSearch indexes","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create mappings table in db for ElasticSearch indexes","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create ElasticSearch schema","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create ElasticSearch schema","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.0,"width":0.87017953,"height":0.044692736},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"bounds":{"left":0.117519945,"top":0.0,"width":0.8103391,"height":0.03830806},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"bounds":{"left":0.1434508,"top":0.0,"width":0.032912236,"height":0.01396648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"bounds":{"left":0.9318484,"top":0.0,"width":0.005319149,"height":0.01556265},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.103751,"width":0.87017953,"height":0.045490824},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Failed Run PHPunit tests","depth":14,"bounds":{"left":0.117519945,"top":0.10774142,"width":0.79787236,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Run PHPunit tests","depth":17,"bounds":{"left":0.1434508,"top":0.12011173,"width":0.039893616,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7m 19s","depth":15,"bounds":{"left":0.9193817,"top":0.11931365,"width":0.017785905,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.11093376,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.11093376,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.11093376,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix error (Beta)","depth":14,"bounds":{"left":0.8756649,"top":0.022346368,"width":0.0546875,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Explain error","depth":14,"bounds":{"left":0.93301195,"top":0.022346368,"width":0.04936835,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash -eo pipefail","depth":16,"bounds":{"left":0.12583111,"top":0.075019956,"width":0.06732048,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"export","depth":16,"bounds":{"left":0.12583111,"top":0.08938547,"width":0.016788565,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SYMFONY_DEPRECATIONS_HELPER=weak","depth":16,"bounds":{"left":0.14261968,"top":0.08938547,"width":0.092586435,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"echo","depth":16,"bounds":{"left":0.12583111,"top":0.103751,"width":0.011136968,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-e","depth":16,"bounds":{"left":0.13696809,"top":0.103751,"width":0.011303191,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"\\nxdebug.mode=coverage\\nxdebug.coverage_output_dir=/home/circleci/project\\nzend_extension=xdebug.so\\n\"","depth":16,"bounds":{"left":0.14827128,"top":0.103751,"width":0.28873006,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":">> /usr/","depth":16,"bounds":{"left":0.43700132,"top":0.103751,"width":0.025265958,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local","depth":16,"bounds":{"left":0.46226728,"top":0.103751,"width":0.013962766,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/etc/php/conf.d/docker-php-ext-xdebug.ini","depth":16,"bounds":{"left":0.47623006,"top":0.103751,"width":0.1178524,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml","depth":16,"bounds":{"left":0.12583111,"top":0.11811652,"width":0.2130984,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"202","depth":15,"bounds":{"left":0.14178856,"top":0.14485236,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"203","depth":15,"bounds":{"left":0.14178856,"top":0.15921788,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"204","depth":15,"bounds":{"left":0.14178856,"top":0.1735834,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"205","depth":15,"bounds":{"left":0.14178856,"top":0.18794893,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"206","depth":15,"bounds":{"left":0.14178856,"top":0.20231445,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"207","depth":15,"bounds":{"left":0.14178856,"top":0.21667998,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"208","depth":15,"bounds":{"left":0.14178856,"top":0.23104548,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"209","depth":15,"bounds":{"left":0.14178856,"top":0.24541101,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"210","depth":15,"bounds":{"left":0.14178856,"top":0.25977653,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"211","depth":15,"bounds":{"left":0.14178856,"top":0.27414206,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"212","depth":15,"bounds":{"left":0.14178856,"top":0.28850758,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"213","depth":15,"bounds":{"left":0.14178856,"top":0.3028731,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"214","depth":15,"bounds":{"left":0.14178856,"top":0.31723863,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"215","depth":15,"bounds":{"left":0.14178856,"top":0.33160415,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"216","depth":15,"bounds":{"left":0.14178856,"top":0.34596968,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"217","depth":15,"bounds":{"left":0.14178856,"top":0.3603352,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"218","depth":15,"bounds":{"left":0.14178856,"top":0.37470073,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"219","depth":15,"bounds":{"left":0.14178856,"top":0.38906625,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"220","depth":15,"bounds":{"left":0.14178856,"top":0.40343177,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-5869390376789878854
|
8036242855121418273
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Failed Run PHPunit tests
Run PHPunit tests
7m 19s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Fix error (Beta)
Explain error
#!/bin/bash -eo pipefail
export
SYMFONY_DEPRECATIONS_HELPER=weak
echo
-e
"\nxdebug.mode=coverage\nxdebug.coverage_output_dir=/home/circleci/project\nzend_extension=xdebug.so\n"
>> /usr/
local
/etc/php/conf.d/docker-php-ext-xdebug.ini
vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51642
|
1814
|
13
|
2026-05-18T08:51:52.149412+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094312149_m2.jpg...
|
Firefox
|
test (888432) - jiminny/app — Work
|
1
|
app.circleci.com/pipelines/github/jiminny/app/5848 app.circleci.com/pipelines/github/jiminny/app/58486/workflows/60b2acd9-bcff-46eb-80d0-2b2ef2ad9d03/jobs/888432...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Failed Run PHPunit tests
Run PHPunit tests
7m 19s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Fix error (Beta)
Explain error
#!/bin/bash -eo pipefail
export
SYMFONY_DEPRECATIONS_HELPER=weak
echo
-e
"\nxdebug.mode=coverage\nxdebug.coverage_output_dir=/home/circleci/project\nzend_extension=xdebug.so\n"
>> /usr/
local
/etc/php/conf.d/docker-php-ext-xdebug.ini
vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml
202
203
204
205
206
207
208
209
210
211
212
213
214
215...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.042719416,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1590758,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"test (888432) - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"test (888432) - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.048038565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.18994413,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.21707901,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Go to home page","depth":9,"bounds":{"left":0.08726729,"top":0.061452515,"width":0.044215426,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Auto theme","depth":9,"bounds":{"left":0.9375,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open notifications","depth":9,"bounds":{"left":0.95212764,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open support menu","depth":9,"bounds":{"left":0.96675533,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open user menu","depth":9,"bounds":{"left":0.98138297,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"org avatar Current organization: jiminny","depth":9,"bounds":{"left":0.08693484,"top":0.10295291,"width":0.01462766,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Home","depth":10,"bounds":{"left":0.08494016,"top":0.15083799,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":12,"bounds":{"left":0.087765954,"top":0.1839585,"width":0.012965426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines","depth":10,"bounds":{"left":0.08494016,"top":0.21308859,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines","depth":12,"bounds":{"left":0.083942816,"top":0.2462091,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":10,"bounds":{"left":0.08494016,"top":0.2753392,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":12,"bounds":{"left":0.0852726,"top":0.3084597,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":10,"bounds":{"left":0.08494016,"top":0.33798882,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":12,"bounds":{"left":0.08543883,"top":0.37071028,"width":0.01761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":10,"bounds":{"left":0.08494016,"top":0.40023944,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":12,"bounds":{"left":0.085605055,"top":0.4329609,"width":0.017287234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Runners","depth":10,"bounds":{"left":0.08494016,"top":0.46249002,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Runners","depth":12,"bounds":{"left":0.0852726,"top":0.49561054,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Org","depth":10,"bounds":{"left":0.08494016,"top":0.52474064,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Org","depth":12,"bounds":{"left":0.090259306,"top":0.55786115,"width":0.007978723,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Plan","depth":10,"bounds":{"left":0.08494016,"top":0.58699125,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Plan","depth":12,"bounds":{"left":0.08959442,"top":0.6201117,"width":0.00930851,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk sidecars","depth":11,"bounds":{"left":0.07962101,"top":0.8591381,"width":0.02925532,"height":0.059457302},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk sidecars","depth":13,"bounds":{"left":0.08494016,"top":0.8922586,"width":0.01861702,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PREVIEW","depth":12,"bounds":{"left":0.08743351,"top":0.8567438,"width":0.013630319,"height":0.009177973},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk","depth":10,"bounds":{"left":0.07962101,"top":0.9345571,"width":0.02925532,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk","depth":12,"bounds":{"left":0.08726729,"top":0.96727854,"width":0.013962766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard All Pipelines","depth":15,"bounds":{"left":0.1171875,"top":0.12290503,"width":0.040724736,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Pipelines","depth":17,"bounds":{"left":0.1278258,"top":0.12490024,"width":0.030086435,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.15924202,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Project Outline app","depth":15,"bounds":{"left":0.16356383,"top":0.12290503,"width":0.020113032,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":17,"bounds":{"left":0.17420213,"top":0.12490024,"width":0.009474734,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.18500665,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Git Branch JY-20613-allow-owner-role-on-team-setup","depth":15,"bounds":{"left":0.18932846,"top":0.12290503,"width":0.12017952,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":17,"bounds":{"left":0.19996676,"top":0.12490024,"width":0.10954122,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.31083778,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines app #58486","depth":15,"bounds":{"left":0.3151596,"top":0.12290503,"width":0.04138963,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app #58486","depth":17,"bounds":{"left":0.3257979,"top":0.12490024,"width":0.030751329,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.35787898,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Workflows build_accept_deploy","depth":15,"bounds":{"left":0.3622008,"top":0.12290503,"width":0.06200133,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":17,"bounds":{"left":0.3728391,"top":0.12490024,"width":0.051363032,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.42553192,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jobs test (888432)","depth":15,"bounds":{"left":0.42985374,"top":0.12290503,"width":0.046210106,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"test (888432)","depth":17,"bounds":{"left":0.44049203,"top":0.12490024,"width":0.03557181,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"test","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Failed","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Fix Job","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Rebuild Rerun Arrow Drop Down","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Rerun","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More Actions","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Duration","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/ Finished","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"8m 44s","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8m 44s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m ago","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Queued","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Executor / Resource Class","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Docker","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Learn more about resource classes in the docs (opens in new tab)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ARM X-Large","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Info Outline","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Branch","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20613-allow-owner-role-on-team-setup","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PR /","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"#12092","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"#","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12092","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6fae8bb","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Author","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"& Message","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Avatar of Lukas Kovalik","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Steps","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Steps","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Tests tests","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tests","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Timing timing","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Timing","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Artifacts artifacts","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Artifacts","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Resources resources","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resources","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Spin up environment","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Spin up environment","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container cimg/mariadb:10.9.7","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container cimg/mariadb:10.9.7","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container redis:5","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container redis:5","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Preparing environment variables","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preparing environment variables","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Attaching workspace","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Attaching workspace","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - Composer vendor cache (composer.lock)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - frontend build output (public/, this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - frontend build output (public/, this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - backend workspace cache","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - backend workspace cache","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Edit hosts file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Edit hosts file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed composer install /w dev dependencies","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"composer install /w dev dependencies","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create jobs table migration","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create jobs table migration","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database migrations","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database migrations","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database seeders","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database seeders","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run passport:install migrations","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run passport:install migrations","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Wait for mysql to become online","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Wait for mysql to become online","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create mappings table in db for ElasticSearch indexes","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create mappings table in db for ElasticSearch indexes","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create ElasticSearch schema","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create ElasticSearch schema","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.0,"width":0.87017953,"height":0.044692736},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"bounds":{"left":0.117519945,"top":0.0,"width":0.8103391,"height":0.03830806},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"bounds":{"left":0.1434508,"top":0.0,"width":0.032912236,"height":0.01396648},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"bounds":{"left":0.9318484,"top":0.0,"width":0.005319149,"height":0.01556265},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.103751,"width":0.87017953,"height":0.045490824},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Failed Run PHPunit tests","depth":14,"bounds":{"left":0.117519945,"top":0.10774142,"width":0.79787236,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Run PHPunit tests","depth":17,"bounds":{"left":0.1434508,"top":0.12011173,"width":0.039893616,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7m 19s","depth":15,"bounds":{"left":0.9193817,"top":0.11931365,"width":0.017785905,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"bounds":{"left":0.9424867,"top":0.11093376,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"bounds":{"left":0.95578456,"top":0.11093376,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"bounds":{"left":0.9690825,"top":0.11093376,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix error (Beta)","depth":14,"bounds":{"left":0.8756649,"top":0.022346368,"width":0.0546875,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Explain error","depth":14,"bounds":{"left":0.93301195,"top":0.022346368,"width":0.04936835,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash -eo pipefail","depth":16,"bounds":{"left":0.12583111,"top":0.075019956,"width":0.06732048,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"export","depth":16,"bounds":{"left":0.12583111,"top":0.08938547,"width":0.016788565,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SYMFONY_DEPRECATIONS_HELPER=weak","depth":16,"bounds":{"left":0.14261968,"top":0.08938547,"width":0.092586435,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"echo","depth":16,"bounds":{"left":0.12583111,"top":0.103751,"width":0.011136968,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-e","depth":16,"bounds":{"left":0.13696809,"top":0.103751,"width":0.011303191,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"\\nxdebug.mode=coverage\\nxdebug.coverage_output_dir=/home/circleci/project\\nzend_extension=xdebug.so\\n\"","depth":16,"bounds":{"left":0.14827128,"top":0.103751,"width":0.28873006,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":">> /usr/","depth":16,"bounds":{"left":0.43700132,"top":0.103751,"width":0.025265958,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local","depth":16,"bounds":{"left":0.46226728,"top":0.103751,"width":0.013962766,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/etc/php/conf.d/docker-php-ext-xdebug.ini","depth":16,"bounds":{"left":0.47623006,"top":0.103751,"width":0.1178524,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml","depth":16,"bounds":{"left":0.12583111,"top":0.11811652,"width":0.2130984,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"202","depth":15,"bounds":{"left":0.14178856,"top":0.14485236,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"203","depth":15,"bounds":{"left":0.14178856,"top":0.15921788,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"204","depth":15,"bounds":{"left":0.14178856,"top":0.1735834,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"205","depth":15,"bounds":{"left":0.14178856,"top":0.18794893,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"206","depth":15,"bounds":{"left":0.14178856,"top":0.20231445,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"207","depth":15,"bounds":{"left":0.14178856,"top":0.21667998,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"208","depth":15,"bounds":{"left":0.14178856,"top":0.23104548,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"209","depth":15,"bounds":{"left":0.14178856,"top":0.24541101,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"210","depth":15,"bounds":{"left":0.14178856,"top":0.25977653,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"211","depth":15,"bounds":{"left":0.14178856,"top":0.27414206,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"212","depth":15,"bounds":{"left":0.14178856,"top":0.28850758,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"213","depth":15,"bounds":{"left":0.14178856,"top":0.3028731,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"214","depth":15,"bounds":{"left":0.14178856,"top":0.31723863,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"215","depth":15,"bounds":{"left":0.14178856,"top":0.33160415,"width":0.009640957,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-2452421049556038273
|
8036242855121418273
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Failed Run PHPunit tests
Run PHPunit tests
7m 19s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Fix error (Beta)
Explain error
#!/bin/bash -eo pipefail
export
SYMFONY_DEPRECATIONS_HELPER=weak
echo
-e
"\nxdebug.mode=coverage\nxdebug.coverage_output_dir=/home/circleci/project\nzend_extension=xdebug.so\n"
>> /usr/
local
/etc/php/conf.d/docker-php-ext-xdebug.ini
vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml
202
203
204
205
206
207
208
209
210
211
212
213
214
215...
|
51640
|
NULL
|
NULL
|
NULL
|
|
51641
|
1813
|
8
|
2026-05-18T08:51:52.169423+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094312169_m1.jpg...
|
Firefox
|
test (888432) - jiminny/app — Work
|
1
|
app.circleci.com/pipelines/github/jiminny/app/5848 app.circleci.com/pipelines/github/jiminny/app/58486/workflows/60b2acd9-bcff-46eb-80d0-2b2ef2ad9d03/jobs/888432...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Failed Run PHPunit tests
Run PHPunit tests
7m 19s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Fix error (Beta)
Explain error
#!/bin/bash -eo pipefail
export
SYMFONY_DEPRECATIONS_HELPER=weak
echo
-e
"\nxdebug.mode=coverage\nxdebug.coverage_output_dir=/home/circleci/project\nzend_extension=xdebug.so\n"
>> /usr/
local
/etc/php/conf.d/docker-php-ext-xdebug.ini
vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
Link
225
226
227...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"test (888432) - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"test (888432) - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Go to home page","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Auto theme","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open notifications","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open support menu","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open user menu","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"org avatar Current organization: jiminny","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Home","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Runners","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Runners","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Org","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Org","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Plan","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Plan","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk sidecars","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk sidecars","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PREVIEW","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard All Pipelines","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Pipelines","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Project Outline app","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Git Branch JY-20613-allow-owner-role-on-team-setup","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines app #58486","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app #58486","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Workflows build_accept_deploy","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jobs test (888432)","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"test (888432)","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"test","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Failed","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Fix Job","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Rebuild Rerun Arrow Drop Down","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Rerun","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More Actions","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Duration","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/ Finished","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"8m 44s","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8m 44s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m ago","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Queued","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Executor / Resource Class","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Docker","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Learn more about resource classes in the docs (opens in new tab)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ARM X-Large","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Info Outline","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Branch","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20613-allow-owner-role-on-team-setup","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PR /","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"#12092","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"#","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12092","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6fae8bb","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Author","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"& Message","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Avatar of Lukas Kovalik","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Steps","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Steps","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Tests tests","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tests","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Timing timing","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Timing","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Artifacts artifacts","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Artifacts","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Resources resources","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resources","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Spin up environment","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Spin up environment","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container cimg/mariadb:10.9.7","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container cimg/mariadb:10.9.7","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container redis:5","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container redis:5","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Preparing environment variables","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preparing environment variables","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Attaching workspace","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Attaching workspace","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - Composer vendor cache (composer.lock)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - frontend build output (public/, this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - frontend build output (public/, this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - backend workspace cache","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - backend workspace cache","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Edit hosts file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Edit hosts file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed composer install /w dev dependencies","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"composer install /w dev dependencies","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create jobs table migration","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create jobs table migration","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database migrations","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database migrations","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database seeders","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database seeders","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run passport:install migrations","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run passport:install migrations","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Wait for mysql to become online","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Wait for mysql to become online","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create mappings table in db for ElasticSearch indexes","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create mappings table in db for ElasticSearch indexes","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create ElasticSearch schema","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create ElasticSearch schema","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Failed Run PHPunit tests","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Run PHPunit tests","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7m 19s","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix error (Beta)","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Explain error","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash -eo pipefail","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"export","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SYMFONY_DEPRECATIONS_HELPER=weak","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"echo","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-e","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"\\nxdebug.mode=coverage\\nxdebug.coverage_output_dir=/home/circleci/project\\nzend_extension=xdebug.so\\n\"","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":">> /usr/","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/etc/php/conf.d/docker-php-ext-xdebug.ini","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"202","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"203","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"204","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"205","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"206","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"207","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"208","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"209","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"210","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"211","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"212","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"213","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"214","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"215","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"216","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"217","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"218","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"219","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"220","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"221","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"222","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"223","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"224","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Link","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"225","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"226","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"227","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8986924115245973724
|
8036242855121418273
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Failed Run PHPunit tests
Run PHPunit tests
7m 19s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Fix error (Beta)
Explain error
#!/bin/bash -eo pipefail
export
SYMFONY_DEPRECATIONS_HELPER=weak
echo
-e
"\nxdebug.mode=coverage\nxdebug.coverage_output_dir=/home/circleci/project\nzend_extension=xdebug.so\n"
>> /usr/
local
/etc/php/conf.d/docker-php-ext-xdebug.ini
vendor/bin/paratest --coverage-clover coverage.xml --log-junit execution.xml
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
Link
225
226
227...
|
51639
|
NULL
|
NULL
|
NULL
|
|
51644
|
1814
|
14
|
2026-05-18T08:51:53.155036+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094313155_m2.jpg...
|
Firefox
|
test (888432) - jiminny/app — Work
|
1
|
app.circleci.com/pipelines/github/jiminny/app/5848 app.circleci.com/pipelines/github/jiminny/app/58486/workflows/60b2acd9-bcff-46eb-80d0-2b2ef2ad9d03/jobs/888432...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.042719416,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1590758,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"test (888432) - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"test (888432) - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.048038565,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.18994413,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.21707901,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Go to home page","depth":9,"bounds":{"left":0.08726729,"top":0.061452515,"width":0.044215426,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Auto theme","depth":9,"bounds":{"left":0.9375,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open notifications","depth":9,"bounds":{"left":0.95212764,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open support menu","depth":9,"bounds":{"left":0.96675533,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open user menu","depth":9,"bounds":{"left":0.98138297,"top":0.061452515,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"org avatar Current organization: jiminny","depth":9,"bounds":{"left":0.08693484,"top":0.10295291,"width":0.01462766,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Home","depth":10,"bounds":{"left":0.08494016,"top":0.15083799,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":12,"bounds":{"left":0.087765954,"top":0.1839585,"width":0.012965426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines","depth":10,"bounds":{"left":0.08494016,"top":0.21308859,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines","depth":12,"bounds":{"left":0.083942816,"top":0.2462091,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":10,"bounds":{"left":0.08494016,"top":0.2753392,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":12,"bounds":{"left":0.0852726,"top":0.3084597,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":10,"bounds":{"left":0.08494016,"top":0.33798882,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":12,"bounds":{"left":0.08543883,"top":0.37071028,"width":0.01761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":10,"bounds":{"left":0.08494016,"top":0.40023944,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":12,"bounds":{"left":0.085605055,"top":0.4329609,"width":0.017287234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Runners","depth":10,"bounds":{"left":0.08494016,"top":0.46249002,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Runners","depth":12,"bounds":{"left":0.0852726,"top":0.49561054,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Org","depth":10,"bounds":{"left":0.08494016,"top":0.52474064,"width":0.01861702,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Org","depth":12,"bounds":{"left":0.090259306,"top":0.55786115,"width":0.007978723,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Plan","depth":10,"bounds":{"left":0.08494016,"top":0.58699125,"width":0.01861702,"height":0.04668795},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Plan","depth":12,"bounds":{"left":0.08959442,"top":0.6201117,"width":0.00930851,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk sidecars","depth":11,"bounds":{"left":0.07962101,"top":0.8591381,"width":0.02925532,"height":0.059457302},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk sidecars","depth":13,"bounds":{"left":0.08494016,"top":0.8922586,"width":0.01861702,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PREVIEW","depth":12,"bounds":{"left":0.08743351,"top":0.8567438,"width":0.013630319,"height":0.009177973},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk","depth":10,"bounds":{"left":0.07962101,"top":0.9345571,"width":0.02925532,"height":0.046288908},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk","depth":12,"bounds":{"left":0.08726729,"top":0.96727854,"width":0.013962766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard All Pipelines","depth":15,"bounds":{"left":0.1171875,"top":0.12290503,"width":0.040724736,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Pipelines","depth":17,"bounds":{"left":0.1278258,"top":0.12490024,"width":0.030086435,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.15924202,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Project Outline app","depth":15,"bounds":{"left":0.16356383,"top":0.12290503,"width":0.020113032,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":17,"bounds":{"left":0.17420213,"top":0.12490024,"width":0.009474734,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.18500665,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Git Branch JY-20613-allow-owner-role-on-team-setup","depth":15,"bounds":{"left":0.18932846,"top":0.12290503,"width":0.12017952,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":17,"bounds":{"left":0.19996676,"top":0.12490024,"width":0.10954122,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.31083778,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines app #58486","depth":15,"bounds":{"left":0.3151596,"top":0.12290503,"width":0.04138963,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app #58486","depth":17,"bounds":{"left":0.3257979,"top":0.12490024,"width":0.030751329,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.35787898,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Workflows build_accept_deploy","depth":15,"bounds":{"left":0.3622008,"top":0.12290503,"width":0.06200133,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":17,"bounds":{"left":0.3728391,"top":0.12490024,"width":0.051363032,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.42553192,"top":0.12569833,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jobs test (888432)","depth":15,"bounds":{"left":0.42985374,"top":0.12290503,"width":0.046210106,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"test (888432)","depth":17,"bounds":{"left":0.44049203,"top":0.12490024,"width":0.03557181,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"test","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Failed","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Fix Job","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Rebuild Rerun Arrow Drop Down","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Rerun","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More Actions","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Duration","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/ Finished","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"8m 44s","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8m 44s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m ago","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Queued","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Executor / Resource Class","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Docker","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Learn more about resource classes in the docs (opens in new tab)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ARM X-Large","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Info Outline","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Branch","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20613-allow-owner-role-on-team-setup","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PR /","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"#12092","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"#","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12092","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6fae8bb","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Author","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"& Message","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Avatar of Lukas Kovalik","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Steps","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Steps","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Tests tests","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tests","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Timing timing","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Timing","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Artifacts artifacts","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Artifacts","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Resources resources","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resources","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Spin up environment","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Spin up environment","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container cimg/mariadb:10.9.7","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container cimg/mariadb:10.9.7","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container redis:5","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container redis:5","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Preparing environment variables","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preparing environment variables","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Attaching workspace","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Attaching workspace","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - Composer vendor cache (composer.lock)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - frontend build output (public/, this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - frontend build output (public/, this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - backend workspace cache","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - backend workspace cache","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Edit hosts file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Edit hosts file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed composer install /w dev dependencies","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"composer install /w dev dependencies","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create jobs table migration","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create jobs table migration","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database migrations","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database migrations","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database seeders","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database seeders","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run passport:install migrations","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run passport:install migrations","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Wait for mysql to become online","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Wait for mysql to become online","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create mappings table in db for ElasticSearch indexes","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create mappings table in db for ElasticSearch indexes","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create ElasticSearch schema","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create ElasticSearch schema","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"bounds":{"left":0.117519945,"top":0.0,"width":0.87017953,"height":0.044692736},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"}]...
|
668867745087745692
|
8036242855121418273
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51643
|
1813
|
9
|
2026-05-18T08:51:53.187747+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094313187_m1.jpg...
|
Firefox
|
test (888432) - jiminny/app — Work
|
1
|
app.circleci.com/pipelines/github/jiminny/app/5848 app.circleci.com/pipelines/github/jiminny/app/58486/workflows/60b2acd9-bcff-46eb-80d0-2b2ef2ad9d03/jobs/888432...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Failed Run PHPunit tests
Run PHPunit tests
7m 19s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Fix error (Beta)
Explain error
#!/bin/bash -eo pipefail
export
SYMFONY_DEPRECATIONS_HELPER=weak
echo
-e
"\nxdebug.mode=coverage\nxdebug.coverage_output_dir=/home/circleci/project\nzend_extension=xdebug.so\n"
>> /usr/
local...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"test (888432) - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"test (888432) - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Go to home page","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Auto theme","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open notifications","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open support menu","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Open user menu","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"org avatar Current organization: jiminny","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Home","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deploys","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deploys","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Runners","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Runners","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Org","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Org","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Plan","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Plan","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk sidecars","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk sidecars","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PREVIEW","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chunk","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Chunk","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard All Pipelines","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Pipelines","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Project Outline app","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Git Branch JY-20613-allow-owner-role-on-team-setup","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pipelines app #58486","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app #58486","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Workflows build_accept_deploy","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build_accept_deploy","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jobs test (888432)","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"test (888432)","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"test","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Failed","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Fix Job","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Rebuild Rerun Arrow Drop Down","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Rerun","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More Actions","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Duration","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/ Finished","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"8m 44s","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8m 44s","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy timestamp to clipboard","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1m ago","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Queued","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Executor / Resource Class","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Docker","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Learn more about resource classes in the docs (opens in new tab)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ARM X-Large","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Info Outline","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Branch","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20613-allow-owner-role-on-team-setup","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613-allow-owner-role-on-team-setup","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PR /","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"#12092","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"#","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12092","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open commit on version control site","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6fae8bb","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Author","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"& Message","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Avatar of Lukas Kovalik","depth":13,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20613 support owner role on setup team","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Steps","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Steps","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Tests tests","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tests","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Timing timing","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Timing","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Artifacts artifacts","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Artifacts","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Resources resources","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resources","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Spin up environment","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Spin up environment","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container cimg/mariadb:10.9.7","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container cimg/mariadb:10.9.7","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container redis:5","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container redis:5","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8m 41s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Preparing environment variables","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preparing environment variables","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Attaching workspace","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Attaching workspace","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - Composer vendor cache (composer.lock)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - Composer vendor cache (composer.lock)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - frontend build output (public/, this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - frontend build output (public/, this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - backend workspace cache","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - backend workspace cache","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Restore Cache - MySQL test DB snapshot cache (this SHA)","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Edit hosts file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Edit hosts file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed composer install /w dev dependencies","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"composer install /w dev dependencies","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create jobs table migration","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create jobs table migration","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database migrations","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database migrations","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run database seeders","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run database seeders","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Run passport:install migrations","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run passport:install migrations","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Wait for mysql to become online","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Wait for mysql to become online","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create mappings table in db for ElasticSearch indexes","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create mappings table in db for ElasticSearch indexes","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Create ElasticSearch schema","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create ElasticSearch schema","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Passed Cache .env file","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Cache .env file","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab","depth":13,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Status Failed Run PHPunit tests","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Run PHPunit tests","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7m 19s","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Find in Step Output","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open step output in new tab","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open raw step output in new tab","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Fix error (Beta)","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Explain error","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash -eo pipefail","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"export","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SYMFONY_DEPRECATIONS_HELPER=weak","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"echo","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-e","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"\\nxdebug.mode=coverage\\nxdebug.coverage_output_dir=/home/circleci/project\\nzend_extension=xdebug.so\\n\"","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":">> /usr/","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-734776958633945320
|
8036242855121418272
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Usage | Windsurf
Usage | Windsurf
Feed — jiminny — Sentry
Feed — jiminny — Sentry
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
JY-20613 support owner role on setup team by LakyLak · Pull Request #12092 · jiminny/app
test (888432) - jiminny/app
test (888432) - jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Go to home page
Auto theme
Open notifications
Open support menu
Open user menu
org avatar Current organization: jiminny
Home
Home
Pipelines
Pipelines
Projects
Projects
Deploys
Deploys
Insights
Insights
Runners
Runners
Org
Org
Plan
Plan
Chunk sidecars
Chunk sidecars
PREVIEW
Chunk
Chunk
Dashboard All Pipelines
All Pipelines
/
Project Outline app
app
/
Git Branch JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
/
Pipelines app #58486
app #58486
/
Workflows build_accept_deploy
build_accept_deploy
/
Jobs test (888432)
test (888432)
test
test
Failed
Fix Job
Rebuild Rerun Arrow Drop Down
Rerun
More Actions
Duration
/ Finished
8m 44s
8m 44s
/
Copy timestamp to clipboard
1m ago
Queued
0s
Executor / Resource Class
Docker
/
Learn more about resource classes in the docs (opens in new tab)
ARM X-Large
Info Outline
Branch
JY-20613-allow-owner-role-on-team-setup
JY-20613-allow-owner-role-on-team-setup
PR /
Commit
#12092
#
12092
/
Open commit on version control site
6fae8bb
Author
& Message
Avatar of Lukas Kovalik
JY-20613 support owner role on setup team
Steps
Steps
Tests tests
Tests
Timing timing
Timing
Artifacts artifacts
Artifacts
Resources resources
Resources
Status Passed Spin up environment 4s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Spin up environment
Spin up environment
4s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container cimg/mariadb:10.9.7
Container cimg/mariadb:10.9.7
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container redis:5 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container redis:5
Container redis:5
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2 8m 41s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
Container docker.elastic.co/elasticsearch/elasticsearch:7.10.2
8m 41s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Preparing environment variables 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Preparing environment variables
Preparing environment variables
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Attaching workspace 8s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Attaching workspace
Attaching workspace
8s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock) 9s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - Composer vendor cache (composer.lock)
Restore Cache - Composer vendor cache (composer.lock)
9s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - frontend build output (public/, this SHA)
Restore Cache - frontend build output (public/, this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - backend workspace cache
Restore Cache - backend workspace cache
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA) 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Restore Cache - MySQL test DB snapshot cache (this SHA)
Restore Cache - MySQL test DB snapshot cache (this SHA)
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Edit hosts file 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Edit hosts file
Edit hosts file
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed composer install /w dev dependencies 31s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed composer install /w dev dependencies
composer install /w dev dependencies
31s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create jobs table migration 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create jobs table migration
Create jobs table migration
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database migrations 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database migrations
Run database migrations
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run database seeders 7s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run database seeders
Run database seeders
7s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Run passport:install migrations 5s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Run passport:install migrations
Run passport:install migrations
5s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Wait for mysql to become online 0s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Wait for mysql to become online
Wait for mysql to become online
0s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create mappings table in db for ElasticSearch indexes
Create mappings table in db for ElasticSearch indexes
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Create ElasticSearch schema 3s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Create ElasticSearch schema
Create ElasticSearch schema
3s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Passed Cache .env file 1s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Passed Cache .env file
Cache .env file
1s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Status Failed Run PHPunit tests 7m 19s Find in Step Output Open step output in new tab Open raw step output in new tab
Status Failed Run PHPunit tests
Run PHPunit tests
7m 19s
Find in Step Output
Open step output in new tab
Open raw step output in new tab
Fix error (Beta)
Explain error
#!/bin/bash -eo pipefail
export
SYMFONY_DEPRECATIONS_HELPER=weak
echo
-e
"\nxdebug.mode=coverage\nxdebug.coverage_output_dir=/home/circleci/project\nzend_extension=xdebug.so\n"
>> /usr/
local...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51645
|
1813
|
10
|
2026-05-18T08:51:57.594528+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094317594_m1.jpg...
|
PhpStorm
|
faVsco.js – CreateTeamRequest.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, 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
<?php
namespace Jiminny\Http\Requests\Settings\Teams;
use Jiminny\Http\Requests\ValidatesBillingAddresses;
use Jiminny\Models\Feature\FeatureEnum;
use Illuminate\Foundation\Http\FormRequest;
use Jiminny\Utils\DomainResolver;
final class CreateTeamRequest extends FormRequest
{
use ValidatesBillingAddresses;
public function authorize(): bool
{
return true;
}
public function rules(): array
{
$existingFeatures = implode(',', FeatureEnum::names());
$rules = [
'name' => ['required', 'string', 'max:150'],
'owner_email' => ['required', 'email'],
'owner_role' => ['required', 'in:recorder,recorder_and_voice,analyst'],
'account_id' => ['required', 'uuid:accounts'],
'calendar' => ['required', 'string', 'max:150'],
'crm' => ['required', 'string', 'max:150'],
'features' => ['array'],
'features.*' => ['in:' . $existingFeatures],
'domain' => ['sometimes', 'nullable', 'max:150'],
'tier_id' => ['required', 'uuid:tiers'],
'partner_id' => ['sometimes', 'nullable', 'uuid:partners'],
];
$features = $this->input('features');
if (in_array(FeatureEnum::DIALER->name, $features)) {
// Add Billing address rules
$rules += $this->getBillingAddressRules();
}
return $rules;
}
public function getOwnerEmail(): string
{
return $this->input('owner_email');
}
public function getOwnerRole(): string
{
return $this->input('owner_role');
}
public function getDomain(): ?string
{
$domain = $this->input('domain');
if ($domain === null) {
$domain = DomainResolver::fromEmail($this->getOwnerEmail());
} else {
$domain = DomainResolver::fromUrl($domain);
}
return $domain;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20613-allow-owner-role-on-team-setup, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20613-allow-owner-role-on-team-setup","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Http\\Requests\\Settings\\Teams;\n\nuse Jiminny\\Http\\Requests\\ValidatesBillingAddresses;\nuse Jiminny\\Models\\Feature\\FeatureEnum;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Jiminny\\Utils\\DomainResolver;\n\nfinal class CreateTeamRequest extends FormRequest\n{\n use ValidatesBillingAddresses;\n\n public function authorize(): bool\n {\n return true;\n }\n\n public function rules(): array\n {\n $existingFeatures = implode(',', FeatureEnum::names());\n\n $rules = [\n 'name' => ['required', 'string', 'max:150'],\n 'owner_email' => ['required', 'email'],\n 'owner_role' => ['required', 'in:recorder,recorder_and_voice,analyst'],\n 'account_id' => ['required', 'uuid:accounts'],\n 'calendar' => ['required', 'string', 'max:150'],\n 'crm' => ['required', 'string', 'max:150'],\n 'features' => ['array'],\n 'features.*' => ['in:' . $existingFeatures],\n 'domain' => ['sometimes', 'nullable', 'max:150'],\n 'tier_id' => ['required', 'uuid:tiers'],\n 'partner_id' => ['sometimes', 'nullable', 'uuid:partners'],\n ];\n\n $features = $this->input('features');\n if (in_array(FeatureEnum::DIALER->name, $features)) {\n // Add Billing address rules\n $rules += $this->getBillingAddressRules();\n }\n\n return $rules;\n }\n\n public function getOwnerEmail(): string\n {\n return $this->input('owner_email');\n }\n\n public function getOwnerRole(): string\n {\n return $this->input('owner_role');\n }\n\n public function getDomain(): ?string\n {\n $domain = $this->input('domain');\n\n if ($domain === null) {\n $domain = DomainResolver::fromEmail($this->getOwnerEmail());\n } else {\n $domain = DomainResolver::fromUrl($domain);\n }\n\n return $domain;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Http\\Requests\\Settings\\Teams;\n\nuse Jiminny\\Http\\Requests\\ValidatesBillingAddresses;\nuse Jiminny\\Models\\Feature\\FeatureEnum;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Jiminny\\Utils\\DomainResolver;\n\nfinal class CreateTeamRequest extends FormRequest\n{\n use ValidatesBillingAddresses;\n\n public function authorize(): bool\n {\n return true;\n }\n\n public function rules(): array\n {\n $existingFeatures = implode(',', FeatureEnum::names());\n\n $rules = [\n 'name' => ['required', 'string', 'max:150'],\n 'owner_email' => ['required', 'email'],\n 'owner_role' => ['required', 'in:recorder,recorder_and_voice,analyst'],\n 'account_id' => ['required', 'uuid:accounts'],\n 'calendar' => ['required', 'string', 'max:150'],\n 'crm' => ['required', 'string', 'max:150'],\n 'features' => ['array'],\n 'features.*' => ['in:' . $existingFeatures],\n 'domain' => ['sometimes', 'nullable', 'max:150'],\n 'tier_id' => ['required', 'uuid:tiers'],\n 'partner_id' => ['sometimes', 'nullable', 'uuid:partners'],\n ];\n\n $features = $this->input('features');\n if (in_array(FeatureEnum::DIALER->name, $features)) {\n // Add Billing address rules\n $rules += $this->getBillingAddressRules();\n }\n\n return $rules;\n }\n\n public function getOwnerEmail(): string\n {\n return $this->input('owner_email');\n }\n\n public function getOwnerRole(): string\n {\n return $this->input('owner_role');\n }\n\n public function getDomain(): ?string\n {\n $domain = $this->input('domain');\n\n if ($domain === null) {\n $domain = DomainResolver::fromEmail($this->getOwnerEmail());\n } else {\n $domain = DomainResolver::fromUrl($domain);\n }\n\n return $domain;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"17","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\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,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-3353276502164043076
|
-6469582899868508543
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, 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
<?php
namespace Jiminny\Http\Requests\Settings\Teams;
use Jiminny\Http\Requests\ValidatesBillingAddresses;
use Jiminny\Models\Feature\FeatureEnum;
use Illuminate\Foundation\Http\FormRequest;
use Jiminny\Utils\DomainResolver;
final class CreateTeamRequest extends FormRequest
{
use ValidatesBillingAddresses;
public function authorize(): bool
{
return true;
}
public function rules(): array
{
$existingFeatures = implode(',', FeatureEnum::names());
$rules = [
'name' => ['required', 'string', 'max:150'],
'owner_email' => ['required', 'email'],
'owner_role' => ['required', 'in:recorder,recorder_and_voice,analyst'],
'account_id' => ['required', 'uuid:accounts'],
'calendar' => ['required', 'string', 'max:150'],
'crm' => ['required', 'string', 'max:150'],
'features' => ['array'],
'features.*' => ['in:' . $existingFeatures],
'domain' => ['sometimes', 'nullable', 'max:150'],
'tier_id' => ['required', 'uuid:tiers'],
'partner_id' => ['sometimes', 'nullable', 'uuid:partners'],
];
$features = $this->input('features');
if (in_array(FeatureEnum::DIALER->name, $features)) {
// Add Billing address rules
$rules += $this->getBillingAddressRules();
}
return $rules;
}
public function getOwnerEmail(): string
{
return $this->input('owner_email');
}
public function getOwnerRole(): string
{
return $this->input('owner_role');
}
public function getDomain(): ?string
{
$domain = $this->input('domain');
if ($domain === null) {
$domain = DomainResolver::fromEmail($this->getOwnerEmail());
} else {
$domain = DomainResolver::fromUrl($domain);
}
return $domain;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
51643
|
NULL
|
NULL
|
NULL
|
|
51646
|
1814
|
15
|
2026-05-18T08:51:57.594532+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094317594_m2.jpg...
|
PhpStorm
|
faVsco.js – CreateTeamRequest.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, 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
<?php
namespace Jiminny\Http\Requests\Settings\Teams;
use Jiminny\Http\Requests\ValidatesBillingAddresses;
use Jiminny\Models\Feature\FeatureEnum;
use Illuminate\Foundation\Http\FormRequest;
use Jiminny\Utils\DomainResolver;
final class CreateTeamRequest extends FormRequest
{
use ValidatesBillingAddresses;
public function authorize(): bool
{
return true;
}
public function rules(): array
{
$existingFeatures = implode(',', FeatureEnum::names());
$rules = [
'name' => ['required', 'string', 'max:150'],
'owner_email' => ['required', 'email'],
'owner_role' => ['required', 'in:recorder,recorder_and_voice,analyst'],
'account_id' => ['required', 'uuid:accounts'],
'calendar' => ['required', 'string', 'max:150'],
'crm' => ['required', 'string', 'max:150'],
'features' => ['array'],
'features.*' => ['in:' . $existingFeatures],
'domain' => ['sometimes', 'nullable', 'max:150'],
'tier_id' => ['required', 'uuid:tiers'],
'partner_id' => ['sometimes', 'nullable', 'uuid:partners'],
];
$features = $this->input('features');
if (in_array(FeatureEnum::DIALER->name, $features)) {
// Add Billing address rules
$rules += $this->getBillingAddressRules();
}
return $rules;
}
public function getOwnerEmail(): string
{
return $this->input('owner_email');
}
public function getOwnerRole(): string
{
return $this->input('owner_role');
}
public function getDomain(): ?string
{
$domain = $this->input('domain');
if ($domain === null) {
$domain = DomainResolver::fromEmail($this->getOwnerEmail());
} else {
$domain = DomainResolver::fromUrl($domain);
}
return $domain;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20613-allow-owner-role-on-team-setup, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.10405585,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20613-allow-owner-role-on-team-setup","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Http\\Requests\\Settings\\Teams;\n\nuse Jiminny\\Http\\Requests\\ValidatesBillingAddresses;\nuse Jiminny\\Models\\Feature\\FeatureEnum;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Jiminny\\Utils\\DomainResolver;\n\nfinal class CreateTeamRequest extends FormRequest\n{\n use ValidatesBillingAddresses;\n\n public function authorize(): bool\n {\n return true;\n }\n\n public function rules(): array\n {\n $existingFeatures = implode(',', FeatureEnum::names());\n\n $rules = [\n 'name' => ['required', 'string', 'max:150'],\n 'owner_email' => ['required', 'email'],\n 'owner_role' => ['required', 'in:recorder,recorder_and_voice,analyst'],\n 'account_id' => ['required', 'uuid:accounts'],\n 'calendar' => ['required', 'string', 'max:150'],\n 'crm' => ['required', 'string', 'max:150'],\n 'features' => ['array'],\n 'features.*' => ['in:' . $existingFeatures],\n 'domain' => ['sometimes', 'nullable', 'max:150'],\n 'tier_id' => ['required', 'uuid:tiers'],\n 'partner_id' => ['sometimes', 'nullable', 'uuid:partners'],\n ];\n\n $features = $this->input('features');\n if (in_array(FeatureEnum::DIALER->name, $features)) {\n // Add Billing address rules\n $rules += $this->getBillingAddressRules();\n }\n\n return $rules;\n }\n\n public function getOwnerEmail(): string\n {\n return $this->input('owner_email');\n }\n\n public function getOwnerRole(): string\n {\n return $this->input('owner_role');\n }\n\n public function getDomain(): ?string\n {\n $domain = $this->input('domain');\n\n if ($domain === null) {\n $domain = DomainResolver::fromEmail($this->getOwnerEmail());\n } else {\n $domain = DomainResolver::fromUrl($domain);\n }\n\n return $domain;\n }\n}","depth":4,"bounds":{"left":0.15724733,"top":0.0,"width":0.22273937,"height":1.0},"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Http\\Requests\\Settings\\Teams;\n\nuse Jiminny\\Http\\Requests\\ValidatesBillingAddresses;\nuse Jiminny\\Models\\Feature\\FeatureEnum;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Jiminny\\Utils\\DomainResolver;\n\nfinal class CreateTeamRequest extends FormRequest\n{\n use ValidatesBillingAddresses;\n\n public function authorize(): bool\n {\n return true;\n }\n\n public function rules(): array\n {\n $existingFeatures = implode(',', FeatureEnum::names());\n\n $rules = [\n 'name' => ['required', 'string', 'max:150'],\n 'owner_email' => ['required', 'email'],\n 'owner_role' => ['required', 'in:recorder,recorder_and_voice,analyst'],\n 'account_id' => ['required', 'uuid:accounts'],\n 'calendar' => ['required', 'string', 'max:150'],\n 'crm' => ['required', 'string', 'max:150'],\n 'features' => ['array'],\n 'features.*' => ['in:' . $existingFeatures],\n 'domain' => ['sometimes', 'nullable', 'max:150'],\n 'tier_id' => ['required', 'uuid:tiers'],\n 'partner_id' => ['sometimes', 'nullable', 'uuid:partners'],\n ];\n\n $features = $this->input('features');\n if (in_array(FeatureEnum::DIALER->name, $features)) {\n // Add Billing address rules\n $rules += $this->getBillingAddressRules();\n }\n\n return $rules;\n }\n\n public function getOwnerEmail(): string\n {\n return $this->input('owner_email');\n }\n\n public function getOwnerRole(): string\n {\n return $this->input('owner_role');\n }\n\n public function getDomain(): ?string\n {\n $domain = $this->input('domain');\n\n if ($domain === null) {\n $domain = DomainResolver::fromEmail($this->getOwnerEmail());\n } else {\n $domain = DomainResolver::fromUrl($domain);\n }\n\n return $domain;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.5880984,"top":0.10055866,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"17","depth":4,"bounds":{"left":0.5980718,"top":0.10055866,"width":0.00930851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6090425,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.6163564,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\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,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-3353276502164043076
|
-6469582899868508543
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, 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
<?php
namespace Jiminny\Http\Requests\Settings\Teams;
use Jiminny\Http\Requests\ValidatesBillingAddresses;
use Jiminny\Models\Feature\FeatureEnum;
use Illuminate\Foundation\Http\FormRequest;
use Jiminny\Utils\DomainResolver;
final class CreateTeamRequest extends FormRequest
{
use ValidatesBillingAddresses;
public function authorize(): bool
{
return true;
}
public function rules(): array
{
$existingFeatures = implode(',', FeatureEnum::names());
$rules = [
'name' => ['required', 'string', 'max:150'],
'owner_email' => ['required', 'email'],
'owner_role' => ['required', 'in:recorder,recorder_and_voice,analyst'],
'account_id' => ['required', 'uuid:accounts'],
'calendar' => ['required', 'string', 'max:150'],
'crm' => ['required', 'string', 'max:150'],
'features' => ['array'],
'features.*' => ['in:' . $existingFeatures],
'domain' => ['sometimes', 'nullable', 'max:150'],
'tier_id' => ['required', 'uuid:tiers'],
'partner_id' => ['sometimes', 'nullable', 'uuid:partners'],
];
$features = $this->input('features');
if (in_array(FeatureEnum::DIALER->name, $features)) {
// Add Billing address rules
$rules += $this->getBillingAddressRules();
}
return $rules;
}
public function getOwnerEmail(): string
{
return $this->input('owner_email');
}
public function getOwnerRole(): string
{
return $this->input('owner_role');
}
public function getDomain(): ?string
{
$domain = $this->input('domain');
if ($domain === null) {
$domain = DomainResolver::fromEmail($this->getOwnerEmail());
} else {
$domain = DomainResolver::fromUrl($domain);
}
return $domain;
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
51644
|
NULL
|
NULL
|
NULL
|
|
51647
|
1814
|
16
|
2026-05-18T08:52:01.800214+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094321800_m2.jpg...
|
PhpStorm
|
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project Files
Preview
Filter
Open in Find Tool Win Project Files
Preview
Filter
Open in Find Tool Window
UserInvitationDTOTest
UserInvitationDTOTest.php .../tests/Feature/DTO/UserInvitationDTOTest.php, final class
UserInvitationDTOTest.php .../tests/Feature/DTO/UserInvitationDTOTest.php, final class
Feature/DTO/UserInvitationDTOTest.php
Open In Right Split...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project Files","depth":2,"bounds":{"left":0.6968085,"top":0.24181964,"width":0.03557181,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Preview","depth":2,"bounds":{"left":0.73238033,"top":0.24181964,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter","depth":2,"bounds":{"left":0.74102396,"top":0.24181964,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Find Tool Window","depth":2,"bounds":{"left":0.7496675,"top":0.24181964,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"UserInvitationDTOTest","depth":1,"bounds":{"left":0.50232714,"top":0.27214685,"width":0.25598404,"height":0.023144454},"on_screen":true,"value":"UserInvitationDTOTest","role_description":"text field","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"UserInvitationDTOTest.php .../tests/Feature/DTO/UserInvitationDTOTest.php, final class","depth":2,"bounds":{"left":0.4993351,"top":0.30407023,"width":0.26196808,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"UserInvitationDTOTest.php .../tests/Feature/DTO/UserInvitationDTOTest.php, final class","depth":4,"bounds":{"left":0.4993351,"top":0.30407023,"width":0.26196808,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Feature/DTO/UserInvitationDTOTest.php","depth":1,"bounds":{"left":0.50598407,"top":0.75259376,"width":0.07679521,"height":0.013567438},"on_screen":true,"help_text":"Feature/DTO/UserInvitationDTOTest.php","role_description":"text"},{"role":"AXLink","text":"Open In Right Split","depth":1,"bounds":{"left":0.71476066,"top":0.75259376,"width":0.03856383,"height":0.013567438},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8306013756689006704
|
6490727966374194604
|
visual_change
|
accessibility
|
NULL
|
Project Files
Preview
Filter
Open in Find Tool Win Project Files
Preview
Filter
Open in Find Tool Window
UserInvitationDTOTest
UserInvitationDTOTest.php .../tests/Feature/DTO/UserInvitationDTOTest.php, final class
UserInvitationDTOTest.php .../tests/Feature/DTO/UserInvitationDTOTest.php, final class
Feature/DTO/UserInvitationDTOTest.php
Open In Right Split...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51649
|
1814
|
17
|
2026-05-18T08:52:04.808043+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094324808_m2.jpg...
|
PhpStorm
|
faVsco.js – UserInvitationDTOTest.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, 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
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20613-allow-owner-role-on-team-setup, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.10405585,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20613-allow-owner-role-on-team-setup","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","depth":4,"bounds":{"left":0.15724733,"top":0.09736632,"width":0.390625,"height":0.50359136},"on_screen":true,"value":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.953125,"top":0.07581804,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"17","depth":4,"bounds":{"left":0.9630984,"top":0.07581804,"width":0.00930851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\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,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1414827531814968516
|
-8721363744830697783
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, 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
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
51647
|
NULL
|
NULL
|
NULL
|
|
51648
|
1813
|
11
|
2026-05-18T08:52:04.930399+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094324930_m1.jpg...
|
PhpStorm
|
faVsco.js – UserInvitationDTOTest.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, 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
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide
app ~/jiminny/app, folder...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20613-allow-owner-role-on-team-setup, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20613-allow-owner-role-on-team-setup","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"17","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\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,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app ~/jiminny/app, folder","depth":6,"on_screen":false,"role_description":"text"}]...
|
7060229942886114318
|
-8721363744830697783
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, 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
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide
app ~/jiminny/app, folder...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51651
|
1814
|
18
|
2026-05-18T08:52:05.712395+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094325712_m2.jpg...
|
PhpStorm
|
faVsco.js – UserInvitationDTOTest.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, 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
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20613-allow-owner-role-on-team-setup, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.10405585,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20613-allow-owner-role-on-team-setup","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","depth":4,"bounds":{"left":0.15724733,"top":0.09736632,"width":0.390625,"height":0.50359136},"on_screen":true,"value":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.953125,"top":0.07581804,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"17","depth":4,"bounds":{"left":0.9630984,"top":0.07581804,"width":0.00930851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.074221864,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.074221864,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
4104071373245797901
|
-8218660796407108788
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, 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
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51650
|
1813
|
12
|
2026-05-18T08:52:05.712406+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094325712_m1.jpg...
|
PhpStorm
|
faVsco.js – UserInvitationDTOTest.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, 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
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide
app ~/jiminny/app, folder
.circleci, folder
.cursor, folder
.github
.sonarlint, folder
.vscode, folder
.windsurf, folder
app, sources root
Actions, folder
Component, folder
Acl, folder
ActionItems, folder
Activity, folder
ActivityAnalytics, folder
ActivitySearch, folder...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20613-allow-owner-role-on-team-setup, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20613-allow-owner-role-on-team-setup","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"17","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\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,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app ~/jiminny/app, folder","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".circleci, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".cursor, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".github","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".sonarlint, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".vscode, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".windsurf, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"app, sources root","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Actions, folder","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Component, folder","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Acl, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ActionItems, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Activity, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ActivityAnalytics, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ActivitySearch, folder","depth":9,"on_screen":false,"role_description":"text"}]...
|
-8251296231587782950
|
-8721363744830959923
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, 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
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide
app ~/jiminny/app, folder
.circleci, folder
.cursor, folder
.github
.sonarlint, folder
.vscode, folder
.windsurf, folder
app, sources root
Actions, folder
Component, folder
Acl, folder
ActionItems, folder
Activity, folder
ActivityAnalytics, folder
ActivitySearch, folder...
|
51648
|
NULL
|
NULL
|
NULL
|
|
51653
|
1814
|
19
|
2026-05-18T08:52:09.936688+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094329936_m2.jpg...
|
PhpStorm
|
faVsco.js – UserInvitationDTOTest.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20613-allow-owner-role-on-team-setup, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.10405585,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20613-allow-owner-role-on-team-setup","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.83610374,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UserInvitationDTOTest","depth":6,"bounds":{"left":0.85139626,"top":0.019952115,"width":0.06416223,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Rerun 'PHPUnit: UserInvitationDTOTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'UserInvitationDTOTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Stop 'UserInvitationDTOTest'","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9494681,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","depth":4,"bounds":{"left":0.15724733,"top":0.09736632,"width":0.21476063,"height":0.50359136},"on_screen":true,"value":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
7167623892618525916
|
-8542919694834105524
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}...
|
51651
|
NULL
|
NULL
|
NULL
|
|
51652
|
1813
|
13
|
2026-05-18T08:52:09.958915+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094329958_m1.jpg...
|
PhpStorm
|
faVsco.js – UserInvitationDTOTest.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20613-allow-owner-role-on-team-setup, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20613-allow-owner-role-on-team-setup","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UserInvitationDTOTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Rerun 'PHPUnit: UserInvitationDTOTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'UserInvitationDTOTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Stop 'UserInvitationDTOTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
7167623892618525916
|
-8542919694834105524
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51654
|
1814
|
20
|
2026-05-18T08:52:10.847518+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094330847_m2.jpg...
|
PhpStorm
|
faVsco.js – UserInvitationDTOTest.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20613-allow-owner-role-on-team-setup, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.10405585,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20613-allow-owner-role-on-team-setup","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.83610374,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UserInvitationDTOTest","depth":6,"bounds":{"left":0.85139626,"top":0.019952115,"width":0.06416223,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Rerun 'PHPUnit: UserInvitationDTOTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'UserInvitationDTOTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Stop 'UserInvitationDTOTest'","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9494681,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","depth":4,"bounds":{"left":0.15724733,"top":0.09736632,"width":0.21476063,"height":0.50359136},"on_screen":true,"value":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.5880984,"top":0.10055866,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"17","depth":4,"bounds":{"left":0.5980718,"top":0.10055866,"width":0.00930851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6090425,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.6163564,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\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,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8761566720896075794
|
-8721363744830697783
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51655
|
1813
|
14
|
2026-05-18T08:52:11.372863+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094331372_m1.jpg...
|
PhpStorm
|
Run
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowH iTerm2ShellEditViewSessionScriptsProfilesWindowHelp₴81+++Preparation for Refi... in 3 h 8 mAPP (-zsh)100% <78• Mon 18 May 11:52:10ffmpegT81O ₴4DOCKERPIPEDRIVE_V2_MIGRATION_TICKETS.md52DEV (docker)++++++++++₴2APP (-zsh)1 file changed, 52 insertions(+)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (pipedrive-sdk-poc) $co master.env.localconfig/logging.phpSwitched to branch'master'Your branch is behind 'origin/master' by 31 commits, and can be fast-forwarded.Cuse"git pull"to update your local branch)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pullUpdating 31c62924a5..cb4ebf0c36Fast-forwardapp/Component/ES/Processor/Traits/SelectEntityListTrait.phpapp/Services/Calendar/CalendarActivityService.phpapp/Services/Calendar/Command/MapActivityData.phpdocs/mcp/explorer/explorer.htmldocs/mcp/explorer/explorer.template.htmldocs/mcp/tools-list.jsondocs/mcp/tools.mdtests/Unit/Component/ES/AsyncUpdateElasticSearchTest.phptests/Unit/Component/ES/Listeners/UpdateMultipleTargetsListenerTest.php204611061041023731171610++++++++++++++++++++tests/Unit/Component/ES/Listeners/UpdateSingleTargetListenerTest.phptests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.phptests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.phptests/Unit/Component/ES/UpdateProcessManagerTest.phptests/Unit/Services/Calendar/CalendarActivityServiceTest.phptests/Unit/Services/Calendar/Command/MapActivityDataTest.php91521507815 files changed, 832 insertions(+), 322 deletions(-)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co -b JY-20613-allow-owner-role-on-team-setupSwitched to a new branch 'JY-20613-allow-owner-role-on-team-setup'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ csfixdocker exec-it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diffPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminskiand contributors.PHP runtime: 8.3.30Running analysis on 7 cores with 10 files per process.Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!Loadedconfig default from".php-cs-fixer.dist.php".5682/5682 [8100%APPFixed 0 of 5682 files in 56.978 seconds, 67.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any containeror image + docker debug docker_lamp_1Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ ||...
|
NULL
|
-4076031657921111465
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowH iTerm2ShellEditViewSessionScriptsProfilesWindowHelp₴81+++Preparation for Refi... in 3 h 8 mAPP (-zsh)100% <78• Mon 18 May 11:52:10ffmpegT81O ₴4DOCKERPIPEDRIVE_V2_MIGRATION_TICKETS.md52DEV (docker)++++++++++₴2APP (-zsh)1 file changed, 52 insertions(+)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (pipedrive-sdk-poc) $co master.env.localconfig/logging.phpSwitched to branch'master'Your branch is behind 'origin/master' by 31 commits, and can be fast-forwarded.Cuse"git pull"to update your local branch)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pullUpdating 31c62924a5..cb4ebf0c36Fast-forwardapp/Component/ES/Processor/Traits/SelectEntityListTrait.phpapp/Services/Calendar/CalendarActivityService.phpapp/Services/Calendar/Command/MapActivityData.phpdocs/mcp/explorer/explorer.htmldocs/mcp/explorer/explorer.template.htmldocs/mcp/tools-list.jsondocs/mcp/tools.mdtests/Unit/Component/ES/AsyncUpdateElasticSearchTest.phptests/Unit/Component/ES/Listeners/UpdateMultipleTargetsListenerTest.php204611061041023731171610++++++++++++++++++++tests/Unit/Component/ES/Listeners/UpdateSingleTargetListenerTest.phptests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.phptests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.phptests/Unit/Component/ES/UpdateProcessManagerTest.phptests/Unit/Services/Calendar/CalendarActivityServiceTest.phptests/Unit/Services/Calendar/Command/MapActivityDataTest.php91521507815 files changed, 832 insertions(+), 322 deletions(-)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co -b JY-20613-allow-owner-role-on-team-setupSwitched to a new branch 'JY-20613-allow-owner-role-on-team-setup'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ csfixdocker exec-it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diffPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminskiand contributors.PHP runtime: 8.3.30Running analysis on 7 cores with 10 files per process.Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!Loadedconfig default from".php-cs-fixer.dist.php".5682/5682 [8100%APPFixed 0 of 5682 files in 56.978 seconds, 67.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any containeror image + docker debug docker_lamp_1Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ ||...
|
51652
|
NULL
|
NULL
|
NULL
|
|
51656
|
1813
|
15
|
2026-05-18T08:52:12.709673+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094332709_m1.jpg...
|
PhpStorm
|
Run
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Run
UserInvitationDTOTest
Dock
Options
Hide
Runnin Run
UserInvitationDTOTest
Dock
Options
Hide
Running tests…, 0 test passed.
CLI Arguments, Running.
Tests\Feature\DTO\UserInvitationDTOTest, Running.
CLI Arguments, Running.
Tests\Feature\DTO\UserInvitationDTOTest, Running.
Tests\Feature\DTO\UserInvitationDTOTest, Running.
0 test passed
0 / 2 tests
Updating…
Editor
Up the Stack Trace
Down the Stack Trace
Soft-Wrap
Scroll to End
Print…
Clear All
Run...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Run","depth":2,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"UserInvitationDTOTest","depth":2,"on_screen":true,"help_text":"Process ID: 9024","role_description":"text"},{"role":"AXButton","text":"Dock","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Running tests…, 0 test passed.","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"CLI Arguments, Running.","depth":8,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Tests\\Feature\\DTO\\UserInvitationDTOTest, Running.","depth":9,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"CLI Arguments, Running.","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Tests\\Feature\\DTO\\UserInvitationDTOTest, Running.","depth":8,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Tests\\Feature\\DTO\\UserInvitationDTOTest, Running.","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0 test passed","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0 / 2 tests","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Updating…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.046527777,"height":0.017777778},"on_screen":false,"role_description":"text"},{"role":"AXTextArea","text":"Editor","depth":5,"on_screen":true,"role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Up the Stack Trace","depth":5,"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Down the Stack Trace","depth":5,"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Soft-Wrap","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Scroll to End","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Print…","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Clear All","depth":5,"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run","depth":1,"on_screen":true,"role_description":"text"}]...
|
-6090919574465619480
|
9037799338891843744
|
visual_change
|
accessibility
|
NULL
|
Run
UserInvitationDTOTest
Dock
Options
Hide
Runnin Run
UserInvitationDTOTest
Dock
Options
Hide
Running tests…, 0 test passed.
CLI Arguments, Running.
Tests\Feature\DTO\UserInvitationDTOTest, Running.
CLI Arguments, Running.
Tests\Feature\DTO\UserInvitationDTOTest, Running.
Tests\Feature\DTO\UserInvitationDTOTest, Running.
0 test passed
0 / 2 tests
Updating…
Editor
Up the Stack Trace
Down the Stack Trace
Soft-Wrap
Scroll to End
Print…
Clear All
Run...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51657
|
1814
|
21
|
2026-05-18T08:52:13.849338+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094333849_m2.jpg...
|
PhpStorm
|
Run
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Run
UserInvitationDTOTest
Dock
Options
Hide
Runnin Run
UserInvitationDTOTest
Dock
Options
Hide
Running tests…, 0 test passed.
CLI Arguments, Running.
Tests\Feature\DTO\UserInvitationDTOTest, Running.
CLI Arguments, Running.
Tests\Feature\DTO\UserInvitationDTOTest, Running.
Tests\Feature\DTO\UserInvitationDTOTest, Running.
0 test passed
0 / 2 tests
Updating…
Editor
Up the Stack Trace
Down the Stack Trace
Soft-Wrap
Scroll to End
Print…
Clear All
Run...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Run","depth":2,"bounds":{"left":0.116023935,"top":0.24102154,"width":0.01662234,"height":0.024740623},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"UserInvitationDTOTest","depth":2,"bounds":{"left":0.13264628,"top":0.24102154,"width":0.06416223,"height":0.024740623},"on_screen":true,"help_text":"Process ID: 9024","role_description":"text"},{"role":"AXButton","text":"Dock","depth":3,"bounds":{"left":0.56416225,"top":0.2434158,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":3,"bounds":{"left":0.5728058,"top":0.2434158,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":3,"bounds":{"left":0.58144945,"top":0.2434158,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Running tests…, 0 test passed.","depth":7,"bounds":{"left":0.125,"top":0.29289705,"width":0.03956117,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"CLI Arguments, Running.","depth":8,"bounds":{"left":0.13131648,"top":0.3104549,"width":0.038231384,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Tests\\Feature\\DTO\\UserInvitationDTOTest, Running.","depth":9,"bounds":{"left":0.13763298,"top":0.32801276,"width":0.095744684,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"CLI Arguments, Running.","depth":7,"bounds":{"left":0.13131648,"top":0.3104549,"width":0.038231384,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Tests\\Feature\\DTO\\UserInvitationDTOTest, Running.","depth":8,"bounds":{"left":0.13763298,"top":0.32801276,"width":0.095744684,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Tests\\Feature\\DTO\\UserInvitationDTOTest, Running.","depth":7,"bounds":{"left":0.13763298,"top":0.32801276,"width":0.095744684,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0 test passed","depth":4,"bounds":{"left":0.11668883,"top":0.44293696,"width":0.029920213,"height":0.016759777},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0 / 2 tests","depth":4,"bounds":{"left":0.14860372,"top":0.44293696,"width":0.022938829,"height":0.016759777},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Updating…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.022273935,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXTextArea","text":"Editor","depth":5,"bounds":{"left":0.12034574,"top":0.46288908,"width":0.46143618,"height":0.44852355},"on_screen":true,"role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Up the Stack Trace","depth":5,"bounds":{"left":0.5834442,"top":0.46448523,"width":0.007978723,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Down the Stack Trace","depth":5,"bounds":{"left":0.5834442,"top":0.48523542,"width":0.007978723,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Soft-Wrap","depth":5,"bounds":{"left":0.5834442,"top":0.5059856,"width":0.007978723,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Scroll to End","depth":5,"bounds":{"left":0.5834442,"top":0.52673584,"width":0.007978723,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Print…","depth":5,"bounds":{"left":0.5834442,"top":0.547486,"width":0.007978723,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Clear All","depth":5,"bounds":{"left":0.5834442,"top":0.56823623,"width":0.007978723,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run","depth":1,"bounds":{"left":0.3494016,"top":0.21947326,"width":0.009973404,"height":0.012769354},"on_screen":true,"role_description":"text"}]...
|
-6090919574465619480
|
9037799338891843744
|
visual_change
|
accessibility
|
NULL
|
Run
UserInvitationDTOTest
Dock
Options
Hide
Runnin Run
UserInvitationDTOTest
Dock
Options
Hide
Running tests…, 0 test passed.
CLI Arguments, Running.
Tests\Feature\DTO\UserInvitationDTOTest, Running.
CLI Arguments, Running.
Tests\Feature\DTO\UserInvitationDTOTest, Running.
Tests\Feature\DTO\UserInvitationDTOTest, Running.
0 test passed
0 / 2 tests
Updating…
Editor
Up the Stack Trace
Down the Stack Trace
Soft-Wrap
Scroll to End
Print…
Clear All
Run...
|
51654
|
NULL
|
NULL
|
NULL
|
|
51659
|
1814
|
22
|
2026-05-18T08:52:14.229044+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094334229_m2.jpg...
|
PhpStorm
|
faVsco.js – UserInvitationDTOTest.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20613-allow-owner-role-on-team-setup, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.10405585,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20613-allow-owner-role-on-team-setup","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.83610374,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UserInvitationDTOTest","depth":6,"bounds":{"left":0.85139626,"top":0.019952115,"width":0.06416223,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Rerun 'PHPUnit: UserInvitationDTOTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'UserInvitationDTOTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Stop 'UserInvitationDTOTest'","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-8388868110534869739
|
-2874057088690086014
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'
PhpStormVIewINavicarecodeLaravelKeractorTOOISWindowmelprTavsco.s°9 JY-20613-allow-owner-role-on-team-setuproledeyphp api.phpC) TeamController.ongUserinvitationDTolest.onpis vite.config.jscolcreamkequest.onp"C) CreateTeam.pnpEditTeammodal.vue© UserInvitationDTO.phpyarn.locksiohpEyarn-error.loclangnamespace lests reacure uru_ node mocules lidrary roouphostan>use..•> O public>D resourcesanal class Userinvitationbldlest extendslestcaselv D routesphp api.phoUserinvitationDTOTest xphp apl_v2.phpphp console.onophp customer aoi.ohophp embedded.phpv * Running tests.v * CLI Argumentsphp health.ohoTests Feature DTO UserinvitationDTOTestphp scim.ohophp uprotected_web.phpphp web.phpphp webhook.php>D scripts>OJ storageO test passed 0/ 2 testsv Mtestsv D Feature> D Component> C Consolev ODTOO# LIcerinvitationDTOTest.php> C Events> C ExceptionsM utnLocal ChanaesShelv Chandes Z tilles= env.local apophp loaaina.ono confialUnversioned Files 9 filesE env.nikilocal app= env.other apo@ CanAccessAiRenortsTest.ohn tesC) CreateMockAsk. liminnvRenortReso favicon.ico nubli.ids.tyt anrTraw sal querv sal ann.C) SimulateWehhooksCommand.nhnlMI WERHOOK SII TEPING IMDI CMEN"Preparation tor kerl... In sh om100% 2• Mon 18 May 11:52:13=custom.log= laravel.log4 SF [jiminny@localhost]& console (STAGINGIA HS_local [jiminny@localhost]A console [PROD]fii users (PROD]© Kernel.php X A console [EU]class Kernel extends ConsoleKernelRestoretrackscommand:•cllass358HubspotWebhookServiceCommand::class,ProcessMerged0bjectsCommand::class,HubspotJournalPollingCommand::class,SetupJournalDealWebhookSubscriptionsCommand::class,LiscuournaLweonookoudscrpcronscommand..cldss.A6.17AVCascadeImplement Trial OwnerThouaht for 3sUserinvitationDTO.phpThoughts• EditTeamRequest.phpThought for 1s >3/5 tasks donebackena changes complered1. CreateTeamRequest.php - Added owner role validation and getter method2. UserinvitationDTO.php - Modified forownero to use role from request + ADMINI3. EditTeamRequest.php - Added owner role prohibition for edit mode+0 ..+5 -11CreateTeam.oho does NOT need changes - it only creates the team/CRM contiauration/teatures. The ownerl invitation happens afterin eamcontro ler:astoree vallsen nvtatRemainina frontend changes.• Add owner role field to EditTeamModal vue (below Owner email)• Move Opportunity Sync Period field to 3rd row, 1st column•Only show owner role field when creatina (not editina))Ask anvthina (*4L)+ &CodeSWE-1.6Current vercionVONAAAAAAAAAAAAAAAAAAAAAA'driver' => 'errorlog','level' => env('LOG_LEVEL', 'info'),'path' => storage_path( 'logs/Laravel.log')'custom channel' => ['driver' => 'single',"path" => storage_path('logs/custom.log')'level' => env('LOG LEVEL', 'info').1ditterencePo. 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51658
|
1813
|
16
|
2026-05-18T08:52:14.229054+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094334229_m1.jpg...
|
PhpStorm
|
faVsco.js – UserInvitationDTOTest.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20613-allow-owner-role-on-team-setup, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20613-allow-owner-role-on-team-setup","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UserInvitationDTOTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Rerun 'PHPUnit: UserInvitationDTOTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'UserInvitationDTOTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Stop 'UserInvitationDTOTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-8388868110534869739
|
-2874057088690086014
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'
iTerm2ShellEditViewSessionScriptsProfilesWindow₴81+++*Help• 0.•Preparation for Refi... in 3 h 8 mAPP (-zsh)100% <78• Mon 18 May 11:52:13ffmpegT81O ₴4DOCKERPIPEDRIVE_V2_MIGRATION_TICKETS.md52DEV (docker)++++++++++₴2APP (-zsh)1 file changed, 52 insertions(+)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (pipedrive-sdk-poc) $co master. env. localconfig/logging.phpSwitched to branch'master'Your branch is behind 'origin/master' by 31 commits, and can be fast-forwarded.Cuse"git pull"to update your local branch)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pullUpdating 31c62924a5..cb4ebf0c36Fast-forwardapp/Component/ES/Processor/Traits/SelectEntityListTrait.phpapp/Services/Calendar/CalendarActivityService.phpapp/Services/Calendar/Command/MapActivityData.phpdocs/mcp/explorer/explorer.htmldocs/mcp/explorer/explorer.template.htmldocs/mcp/tools-list.jsondocs/mcp/tools.mdtests/Unit/Component/ES/AsyncUpdateElasticSearchTest.phptests/Unit/Component/ES/Listeners/UpdateMultipleTargetsListenerTest.php204611061041023731171610++++++++++++++++++++tests/Unit/Component/ES/Listeners/UpdateSingleTargetListenerTest.phptests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.phptests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.phptests/Unit/Component/ES/UpdateProcessManagerTest.phptests/Unit/Services/Calendar/CalendarActivityServiceTest.phptests/Unit/Services/Calendar/Command/MapActivityDataTest.php91521507815 files changed, 832 insertions(+), 322 deletions(-)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ co -b JY-20613-allow-owner-role-on-team-setupSwitched to a new branch 'JY-20613-allow-owner-role-on-team-setup'lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ csfixdocker exec-it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diffPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminskiand contributors.PHP runtime: 8.3.30Running analysis on 7 cores with 10 files per process.Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!Loadedconfig default from".php-cs-fixer.dist.php".5682/5682 [8100%APPFixed 0 of 5682 files in 56.978 seconds, 67.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any containeror image + docker debug docker_lamp_1Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ ||...
|
51656
|
NULL
|
NULL
|
NULL
|
|
51660
|
1814
|
23
|
2026-05-18T08:52:16.880006+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094336880_m2.jpg...
|
PhpStorm
|
faVsco.js – UserInvitationDTOTest.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20613-allow-owner-role-on-team-setup, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.10405585,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20613-allow-owner-role-on-team-setup","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.83610374,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UserInvitationDTOTest","depth":6,"bounds":{"left":0.85139626,"top":0.019952115,"width":0.06416223,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Rerun 'PHPUnit: UserInvitationDTOTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'UserInvitationDTOTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Stop 'UserInvitationDTOTest'","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9494681,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","depth":4,"bounds":{"left":0.15724733,"top":0.09736632,"width":0.21476063,"height":0.50359136},"on_screen":true,"value":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.5880984,"top":0.10055866,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"17","depth":4,"bounds":{"left":0.5980718,"top":0.10055866,"width":0.00930851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6090425,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.6163564,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\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,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8761566720896075794
|
-8721363744830697783
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
51659
|
NULL
|
NULL
|
NULL
|
|
51661
|
1813
|
17
|
2026-05-18T08:52:45.413080+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094365413_m1.jpg...
|
PhpStorm
|
faVsco.js – UserInvitationDTOTest.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20613-allow-owner-role-on-team-setup, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20613-allow-owner-role-on-team-setup","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UserInvitationDTOTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Rerun 'PHPUnit: UserInvitationDTOTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'UserInvitationDTOTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Stop 'UserInvitationDTOTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"17","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\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,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8761566720896075794
|
-8721363744830697783
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51662
|
1814
|
24
|
2026-05-18T08:52:47.415038+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094367415_m2.jpg...
|
PhpStorm
|
faVsco.js – UserInvitationDTOTest.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20613-allow-owner-role-on-team-setup, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.10405585,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20613-allow-owner-role-on-team-setup","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.83610374,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UserInvitationDTOTest","depth":6,"bounds":{"left":0.85139626,"top":0.019952115,"width":0.06416223,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Rerun 'PHPUnit: UserInvitationDTOTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'UserInvitationDTOTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Stop 'UserInvitationDTOTest'","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9494681,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","depth":4,"bounds":{"left":0.15724733,"top":0.09736632,"width":0.21476063,"height":0.50359136},"on_screen":true,"value":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.5880984,"top":0.10055866,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"17","depth":4,"bounds":{"left":0.5980718,"top":0.10055866,"width":0.00930851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6090425,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.6163564,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\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,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8761566720896075794
|
-8721363744830697783
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
51663
|
1813
|
18
|
2026-05-18T08:53:15.787781+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094395787_m1.jpg...
|
PhpStorm
|
faVsco.js – UserInvitationDTOTest.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20613-allow-owner-role-on-team-setup, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20613-allow-owner-role-on-team-setup","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UserInvitationDTOTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Rerun 'PHPUnit: UserInvitationDTOTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'UserInvitationDTOTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Stop 'UserInvitationDTOTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"17","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\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,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8761566720896075794
|
-8721363744830697783
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Rerun 'PHPUnit: UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
Stop 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
51661
|
NULL
|
NULL
|
NULL
|
|
51664
|
1814
|
25
|
2026-05-18T08:53:17.814736+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094397814_m2.jpg...
|
PhpStorm
|
faVsco.js – UserInvitationDTOTest.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Run 'UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20613-allow-owner-role-on-team-setup, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.10405585,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20613-allow-owner-role-on-team-setup","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.83610374,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UserInvitationDTOTest","depth":6,"bounds":{"left":0.85139626,"top":0.019952115,"width":0.06416223,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'UserInvitationDTOTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'UserInvitationDTOTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","depth":4,"bounds":{"left":0.15724733,"top":0.09736632,"width":0.21476063,"height":0.50359136},"on_screen":true,"value":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.5880984,"top":0.10055866,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"17","depth":4,"bounds":{"left":0.5980718,"top":0.10055866,"width":0.00930851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6090425,"top":0.09896249,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.6163564,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\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,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-8447868150784287695
|
-8721363744830697783
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Run 'UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
51662
|
NULL
|
NULL
|
NULL
|
|
51665
|
1813
|
19
|
2026-05-18T08:53:40.011324+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779094420011_m1.jpg...
|
PhpStorm
|
faVsco.js – UserInvitationDTOTest.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Run 'UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20613-allow-owner-role-on-team-setup, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20613-allow-owner-role-on-team-setup","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UserInvitationDTOTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'UserInvitationDTOTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'UserInvitationDTOTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Tests\\Feature\\DTO;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Jiminny\\DTO\\Invitation\\UserInvitationDTO;\nuse Jiminny\\Http\\Requests\\Settings\\Teams\\CreateTeamRequest;\nuse Jiminny\\Models\\Invitation;\nuse Jiminny\\Models\\Role;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Tests\\TestCase;\n\nfinal class UserInvitationDTOTest extends TestCase\n{\n use DatabaseTransactions;\n\n public function testCreateFromInvitation(): void\n {\n /** @var Invitation $invitation */\n $invitation = Invitation::factory()->create([\n 'email' => 'Test@gmail.com',\n 'group_id' => '1',\n 'team_id' => '1',\n 'role_id' => null,\n 'crm_required' => 1,\n 'is_owner' => 0,\n ]);\n\n /** @var User $user */\n $user = User::factory()->create();\n /** @var Role $userRole */\n $userRole = Role::whereName(User::ROLE_RECORDER)->first();\n\n $invitation->roles()->sync($userRole);\n\n $dto = UserInvitationDTO::fromInvitation($invitation, $user);\n\n self::assertSame('test@gmail.com', $dto->email);\n self::assertSame(1, $dto->groupId);\n self::assertSame(1, $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$userRole->getId()], $dto->roleIds);\n self::assertSame($user, $dto->currentUser);\n }\n\n public function testForOwner(): void\n {\n /** @var Team $team */\n $team = Team::factory()->create();\n\n $request = new CreateTeamRequest([\n 'owner_email' => 'admin@jiminny.com',\n ]);\n\n /** @var User $currentUser */\n $currentUser = User::factory()->create();\n $request->setUserResolver(static fn () => $currentUser);\n\n $dto = UserInvitationDTO::forOwner($request, $team);\n\n /** @var Role $recorderRole */\n $recorderRole = Role::whereName(User::ROLE_RECORDER)->first();\n /** @var Role $adminRole */\n $adminRole = Role::whereName(User::ROLE_ADMIN)->first();\n\n self::assertSame('admin@jiminny.com', $dto->email);\n self::assertNull($dto->groupId);\n self::assertSame($team->getId(), $dto->teamId);\n self::assertTrue($dto->crmRequired);\n self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);\n self::assertSame($currentUser, $dto->currentUser);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"17","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Console;\n\nuse Illuminate\\Console\\ConfirmableTrait;\nuse Illuminate\\Console\\Scheduling\\Event;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse Jiminny\\Component\\Acl\\RemoveExpiredRoleChangeEventsCommand;\nuse Jiminny\\Component\\ActionItems\\Commands\\SendActionItemsCommand;\nuse Jiminny\\Component\\AiActivityType\\Commands\\AutodetectAiActivityTypeCommand;\nuse Jiminny\\Component\\AskJiminnyAi\\Commands\\ProphetAnalyzeClosedDealsCommand;\nuse Jiminny\\Component\\Cache\\Constants;\nuse Jiminny\\Component\\DealInsights\\Commands\\SendDealsUpdateCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\MediaPipelineRestartCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportActivityProcessingTimeToDatadogCommand;\nuse Jiminny\\Component\\MediaPipeline\\Command\\ReportProcessingStatesToDatadogCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\OverrideTranscriptionLocaleCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryFailedTranscriptionsCommand;\nuse Jiminny\\Component\\Transcription\\Commands\\RetryStuckTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ActivitiesMatchCrmCommand;\nuse Jiminny\\Console\\Commands\\Activities\\AutologOldActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DeleteActivitiesForRetentionTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\DownloadMissingTrackCommand;\nuse Jiminny\\Console\\Commands\\Activities\\FixActivitiesOpportunity;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesForChurnedTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\HardDeleteActivitiesTeamsCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReassignTranscriptCommand;\nuse Jiminny\\Console\\Commands\\Activities\\ReindexRecentActivitiesCommand;\nuse Jiminny\\Console\\Commands\\Activities\\RetryProspectSummaryCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeleteCancelledCommand;\nuse Jiminny\\Console\\Commands\\Calendars\\Events\\CalendarEventDeletePastCommand;\nuse Jiminny\\Console\\Commands\\Crm\\BackfillOpportunityUserFromAccountCommand;\nuse Jiminny\\Console\\Commands\\Crm\\CleanDuplicateFieldDataCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ProcessMergedObjectsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\RestoreDealAssociationsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\ProcessHubspotObjectsSyncBatches;\nuse Jiminny\\Console\\Commands\\Crm\\PurgeDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\ListJournalWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\Hubspot\\SetupJournalDealWebhookSubscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Crm\\SyncHubspotActiveDeals;\nuse Jiminny\\Console\\Commands\\Crm\\SyncOpportunitiesMissingFieldDataCommand;\nuse Jiminny\\Console\\Commands\\DeleteOldAiCrmNotesCommand;\nuse Jiminny\\Console\\Commands\\DeleteS3LeftoversCommand;\nuse Jiminny\\Console\\Commands\\DiarizeViaAiParticipantIdentificationCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\DeleteEmailDocumentsCommand;\nuse Jiminny\\Console\\Commands\\Elasticsearch\\RemoveGhostParticipantsCommand;\nuse Jiminny\\Console\\Commands\\FlushRolesPermissionsCache;\nuse Jiminny\\Console\\Commands\\GenerateInternalWebhookToken;\nuse Jiminny\\Console\\Commands\\IssueMcpTokenCommand;\nuse Jiminny\\Console\\Commands\\HubspotJournalPollingCommand;\nuse Jiminny\\Console\\Commands\\HubspotWebhookServiceCommand;\nuse Jiminny\\Console\\Commands\\Livestream\\StopHangingLivestreamsCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteEmailMessagesWithoutActivityCommand;\nuse Jiminny\\Console\\Commands\\Mailboxes\\DeleteInboxEmailsCommand;\nuse Jiminny\\Console\\Commands\\PurgeSoftDeletedOpportunitiesCommand;\nuse Jiminny\\Console\\Commands\\PurgeSyncBatchesCommand;\nuse Jiminny\\Console\\Commands\\RemoveDeleteMarkersCommand;\nuse Jiminny\\Console\\Commands\\RemoveExpiredNudgesCommand;\nuse Jiminny\\Console\\Commands\\RemoveUnusedParticipantSpeechesCommand;\nuse Jiminny\\Console\\Commands\\Reports\\AutomatedReportsRetentionPolicyCommand;\nuse Jiminny\\Console\\Commands\\Reports\\DeleteReportCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityCrmProviderIdCommand;\nuse Jiminny\\Console\\Commands\\RestoreActivityTypeCommand;\nuse Jiminny\\Console\\Commands\\SendNudgeExpirationWarningsCommand;\nuse Jiminny\\Console\\Commands\\Slack\\SyncSlackUserCommand;\nuse Jiminny\\Console\\Commands\\Teams\\SyncTeamUsersCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamDeleteCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteDeactivatedCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamsDeleteRetentionCommand;\nuse Jiminny\\Console\\Commands\\Teams\\TeamSettingPutCommand;\nuse Jiminny\\Console\\Commands\\Teams\\UpdateTeamsCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\CleanupActivityTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\DeleteUnusedTracksCommand;\nuse Jiminny\\Console\\Commands\\Tracks\\RestoreTracksCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\DeleteOldTranscriptionsCommand;\nuse Jiminny\\Console\\Commands\\Transcription\\UpdateOldTranscriptionModelLocalesCommand;\nuse Jiminny\\Console\\Commands\\Twilio\\DeleteChurnedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\DeletePredefinedSubAccounts;\nuse Jiminny\\Console\\Commands\\Twilio\\ReleaseNumbersCommand;\nuse Jiminny\\Jobs\\Activity\\SyncActivity;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\InboxEmail;\nuse Jiminny\\Services\\RecallAI\\Commands\\ImportRegionMeetingCommand;\nuse Jiminny\\Services\\RecallAI\\Commands\\ScheduleBotCommand;\n\nclass Kernel extends ConsoleKernel\n{\n use ConfirmableTrait;\n\n /**\n * The Artisan commands provided by your application.\n *\n * @var string[]\n */\n protected $commands = [\n Commands\\GeckoExport\\GeckoExportTranscriptCommand::class,\n Commands\\GeckoExport\\GeckoExportTranscriptionCommand::class,\n Commands\\GeckoExport\\GeckoExportParticipantSpeechesCommand::class,\n Commands\\Activities\\DeleteForCoachesCommand::class,\n ReindexRecentActivitiesCommand::class,\n Commands\\Crm\\BullhornPingCommand::class,\n Commands\\Crm\\BullhornSessionCommand::class,\n Commands\\Crm\\BullhornSearchCommand::class,\n Commands\\PlaybackThemes\\TopicsConsolidateCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesCopyCommand::class,\n Commands\\PlaybackThemes\\AssignTopicsUsedBySingleTeamCommand::class,\n Commands\\PlaybackThemes\\PlaybackThemesMigrateToVersionsCommand::class,\n Commands\\Vocabulary\\VocabularyCopyCommand::class,\n Commands\\Transcription\\TranscriptionPrintRaw::class,\n Commands\\Migrate\\JiminnyMigratePopulateActivitySourceCommand::class,\n Commands\\EngagementStats\\JiminnyEngagementStatsExplainCommand::class,\n Commands\\EngagementStatsRegenerateCommand::class,\n Commands\\Analytics\\NumberOfActivitiesPerActivityTypeCommand::class,\n Commands\\Elasticsearch\\MappingRunCommand::class,\n Commands\\Elasticsearch\\MappingInstallCommand::class,\n Commands\\Elasticsearch\\UpdateEsMappingSettingsCommand::class,\n Commands\\Analytics\\TranscriptionWordMatchCommand::class,\n Commands\\JiminnyCacheClearCommand::class,\n Commands\\Transcription\\TranscriptionSearchCommand::class,\n RetryStuckTranscriptionsCommand::class,\n RetryFailedTranscriptionsCommand::class,\n Commands\\JiminnyDebugCommand::class,\n Commands\\RunAiCallScoringForUntypedActivitiesCommand::class,\n Commands\\Calendars\\SyncCalendars::class,\n Commands\\Calendars\\SyncDeletedEvents::class,\n Commands\\Twilio\\FetchMetrics::class,\n Commands\\Twilio\\FetchEvents::class,\n Commands\\Twilio\\FetchSummary::class,\n Commands\\Twilio\\SyncZoneAccess::class,\n Commands\\DatabaseTableCount::class,\n Commands\\PurgeConferences::class,\n Commands\\ResetElasticSearch::class,\n Commands\\CreateDatabaseUsers::class,\n Commands\\Activities\\NotifyNotLogged::class,\n Commands\\Crm\\SyncTeamMetadata::class,\n Commands\\Crm\\SyncProfileMetadata::class,\n Commands\\Crm\\SyncContact::class,\n Commands\\Crm\\SyncObjects::class,\n Commands\\Crm\\SyncHubspotObjects::class,\n Commands\\Crm\\SyncAccount::class,\n Commands\\Crm\\ResetGovernorLimits::class,\n Commands\\Crm\\ManageSyncStrategyCommand::class,\n Commands\\ImportRecording::class,\n Commands\\TrackImported::class,\n Commands\\Twilio\\RecoverTwilioTracksCommand::class,\n Commands\\Crm\\SetupLayouts::class,\n Commands\\Tracks\\SyncTwilioTracks::class,\n Commands\\Activities\\StatusCount::class,\n\n Commands\\Mailboxes\\TextRelay\\WatchMailboxEvents::class,\n Commands\\Mailboxes\\InboxCreate::class,\n Commands\\Mailboxes\\InboxSync::class,\n Commands\\Mailboxes\\BatchCreate::class,\n Commands\\Mailboxes\\BatchProcess::class,\n Commands\\Mailboxes\\InboxPurge::class,\n Commands\\Mailboxes\\BatchRetryFailed::class,\n Commands\\Mailboxes\\BatchFailStalled::class,\n Commands\\Mailboxes\\SkipListsRefresh::class,\n Commands\\Mailboxes\\SkipListsDump::class,\n Commands\\Mailboxes\\TextRelay\\SyncMailbox::class,\n Commands\\Mailboxes\\DeleteInboxEmailsCommand::class,\n Commands\\Mailboxes\\DeleteEmailMessagesCommand::class,\n DeleteEmailMessagesWithoutActivityCommand::class,\n\n Commands\\Tracks\\CheckIntegrity::class,\n Commands\\Twilio\\RemoteLifecycle::class,\n Commands\\Twilio\\SyncNumbers::class,\n Commands\\Crm\\SetupActivityTypeForFollowUp::class,\n Commands\\Activities\\CheckPlayable::class,\n Commands\\Activities\\ActivityDeleteCommand::class,\n Commands\\Activities\\Copy::class,\n Commands\\Activities\\ActivityHardDeleteCommand::class,\n Commands\\Reports\\Team::class,\n Commands\\Reports\\GenerateMarketingReport::class,\n Commands\\Reports\\AutomatedReportsCommand::class,\n Commands\\Reports\\AutomatedReportsSendCommand::class,\n Commands\\MuteOrganizerChannel::class,\n Commands\\Tracks\\DeleteTracks::class,\n Commands\\Tracks\\RetryDownload::class,\n Commands\\Tracks\\RetryFailedDownloads::class,\n Commands\\Twilio\\SyncAddresses::class,\n Commands\\Activities\\UpdateElasticSearch::class,\n Commands\\MakeSlackLiveCoachingChatNotesOn::class,\n Commands\\Activities\\PreMeetingNotification::class,\n ScheduleBotCommand::class,\n ImportRegionMeetingCommand::class,\n Commands\\Activities\\MonitorMeetingCountCommand::class,\n Commands\\Activities\\MonitorMeetingStartCommand::class,\n Commands\\Activities\\MonitorMeetingEndCommand::class,\n Commands\\SyncActivity::class,\n Commands\\PhpApm::class,\n Commands\\Crm\\SyncOpportunity::class,\n Commands\\Crm\\SyncLead::class,\n Commands\\Users\\SyncLicenceDataToSalesforce::class,\n Commands\\Crm\\UpdateOpportunitySpecifications::class,\n Commands\\Users\\SyncToIntercom::class,\n Commands\\Users\\SyncToUserPilot::class,\n Commands\\Teams\\SyncToPlanhat::class,\n Commands\\Twilio\\SetZoneAccess::class,\n Commands\\Users\\CreateDefaultSavedSearchesCommand::class,\n Commands\\Crm\\SendNotLogged::class,\n Commands\\Teams\\DeactivateTeamCommand::class,\n Commands\\Crm\\SyncFieldMetadata::class,\n Commands\\Postmark\\SyncEmailTemplatesCommand::class,\n Commands\\PlaybackThemes\\ImportTriggersFromTranslatedCsvCommand::class,\n Commands\\Activities\\PreMeetingReminder::class,\n Commands\\Activities\\CustomerActivitiesExport::class,\n Commands\\Users\\RefreshAccessToken::class,\n Commands\\Calendars\\SetupCalendarSubscription::class,\n Commands\\Activities\\InviteMeetingBot::class,\n Commands\\Activities\\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,\n Commands\\Crm\\MigrateProvider::class,\n Commands\\Activities\\MigrateLocationFromCalendarEventToActivities::class,\n Commands\\HelperTruncateCoachingTables::class,\n Commands\\FixCrossTenantIssues::class,\n Commands\\Activities\\CloudCall\\SetupIntegration::class,\n Commands\\Activities\\CloudTalk\\FixTimeZone::class,\n Commands\\Activities\\Orum\\SetupIntegration::class,\n Commands\\Activities\\JustCall\\SetupIntegration::class,\n Commands\\Activities\\RingCentral\\AddInboundPromptSupport::class,\n Commands\\Dialers\\Dialpad\\SubscribeToWebhooks::class,\n Commands\\RecalculateDealRisksCommand::class,\n SendDealsUpdateCommand::class,\n Commands\\Activities\\SetProviderCapabilitiesField::class,\n Commands\\Teams\\InitiallySetNotificationProviderTeamsTable::class,\n Commands\\Crm\\AddLayoutEntities::class,\n Commands\\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,\n Commands\\JiminnyTokenInfoCommand::class,\n Commands\\JiminnySetEncryptedTokenManagerModeCommand::class,\n Commands\\EncryptTokensCommand::class,\n Commands\\Dialers\\Aircall\\CheckAndRenewWebhooks::class,\n Commands\\Migrate\\MigrateTeamRegionCommand::class,\n Commands\\ManageScimForTeam::class,\n Commands\\Dialers\\SyncUsersCommand::class,\n Commands\\WhichWorkerIsWorkingOnWhichJob::class,\n Commands\\GroupSetDefaultLanguageCommand::class,\n Commands\\Dev\\AddRateLimitCommand::class,\n Commands\\Dev\\ImportCallsCommand::class,\n Commands\\DealInsights\\BuildDealInsightsLayoutCommand::class,\n Commands\\DealInsights\\DeleteAskJiminnyDealPrompts::class,\n Commands\\Crm\\MatchCrmObjectsCommand::class,\n Commands\\Activities\\SetupIntegration\\EightByEight::class,\n Commands\\Calendars\\RemoveCalendarEventActivitiesCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromGongCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromChorusCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromLeexiCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromAvomaCommand::class,\n Commands\\Activities\\Migrator\\MigrateFromClariCommand::class,\n Commands\\Activities\\SetupIntegration\\ConnectAndSell::class,\n Commands\\Activities\\SetupIntegration\\CloudTalk::class,\n Commands\\Users\\CreateConferenceSlug::class,\n Commands\\Elasticsearch\\AsyncUpdateEsEntities::class,\n Commands\\Elasticsearch\\ResetAsyncElasticSearchCommand::class,\n Commands\\Playlists\\PlaylistSharesUpdateCommand::class,\n Commands\\Crm\\AutologDelayedCommand::class,\n Commands\\Activities\\HydrateDefaultActivityTypeCommand::class,\n Commands\\Crm\\CheckActivityLoggableCommand::class,\n Commands\\Activities\\MonitorDialerActivitiesCommand::class,\n Commands\\Activities\\SetupIntegration\\Xant::class,\n Commands\\ImportUsersFromCsvFile::class,\n Commands\\DevPostmanCommand::class,\n Commands\\Playlists\\FixTreeStructureCommand::class,\n Commands\\Zoom\\ResolvePmiLinksCommand::class,\n Commands\\MarkBranchForEnvironmentPipelineCommand::class,\n Commands\\Activities\\ProbeMediaSegmentsCommand::class,\n Commands\\Activities\\SetupIntegration\\AmazonConnect::class,\n Commands\\Playbooks\\ChangePlaybookActivityFieldCommand::class,\n MediaPipelineRestartCommand::class,\n Commands\\Dev\\FixHubSpotTokens::class,\n Commands\\Dev\\MonitorSocialAccountsState::class,\n Commands\\Activities\\SetupIntegration\\Vonage::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlex::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexDirect::class,\n Commands\\Activities\\SetupIntegration\\TwilioFlexSetDialerAuthCredentialsCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioSetS3RecordingCredentialsCommand::class,\n SendActionItemsCommand::class,\n Commands\\Users\\ChangeEmail::class,\n Commands\\Calendars\\ListUserGoogleCalendars::class,\n Commands\\Activities\\JustCall\\SyncPlaybackLinkToCrmCommand::class,\n Commands\\Activities\\HydrateCallWithCrmDataCommand::class,\n Commands\\Activities\\UpdateActivityElasticSearchDocumentCommand::class,\n Commands\\Activities\\SetupIntegration\\Talkdesk::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookListCommand::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookShow::class,\n Commands\\Transcription\\Microsoft\\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,\n Commands\\Activities\\SetupIntegration\\TwilioVideo::class,\n Commands\\Crm\\SetupCloseCrm::class,\n Commands\\Crm\\SetupCopperCrm::class,\n Commands\\Crm\\FullSyncOpportunityCommand::class,\n Commands\\Crm\\IntegrationApp\\CrmEntitiesFullSyncCommand::class,\n Commands\\Crm\\IntegrationApp\\ValidateConnectionCommand::class,\n Commands\\Activities\\Workflow\\RefreshCrmData::class,\n Commands\\Activities\\Migrator\\AnalyseGongCalls::class,\n Commands\\Users\\AddVoiceRoleToRecorderCommand::class,\n Commands\\Activities\\SyncMissingCallDispositions::class,\n Commands\\Calendars\\RemoveFutureCalendarEvents::class,\n FlushRolesPermissionsCache::class,\n Commands\\Activities\\SetupIntegration\\FiveNine::class,\n CalendarEventDeleteCancelledCommand::class,\n CalendarEventDeletePastCommand::class,\n ReportActivityProcessingTimeToDatadogCommand::class,\n ReportProcessingStatesToDatadogCommand::class,\n ReleaseNumbersCommand::class,\n BackfillOpportunityUserFromAccountCommand::class,\n RemoveExpiredRoleChangeEventsCommand::class,\n RemoveExpiredNudgesCommand::class,\n SendNudgeExpirationWarningsCommand::class,\n AutologOldActivitiesCommand::class,\n RemoveUnusedParticipantSpeechesCommand::class,\n DeleteActivitiesForChurnedTeamsCommand::class,\n HardDeleteActivitiesForChurnedTeamsCommand::class,\n TeamDeleteCommand::class,\n TeamsDeleteDeactivatedCommand::class,\n UpdateTeamsCommand::class,\n OverrideTranscriptionLocaleCommand::class,\n SyncSlackUserCommand::class,\n PurgeSoftDeletedOpportunitiesCommand::class,\n PurgeSyncBatchesCommand::class,\n ProphetAnalyzeClosedDealsCommand::class,\n DeleteChurnedSubAccounts::class,\n Commands\\ProphetAi\\DumpContext::class,\n DeletePredefinedSubAccounts::class,\n DeleteActivitiesForRetentionTeamsCommand::class,\n HardDeleteActivitiesTeamsCommand::class,\n TeamsDeleteRetentionCommand::class,\n TeamSettingPutCommand::class,\n StopHangingLivestreamsCommand::class,\n FixActivitiesOpportunity::class,\n Commands\\Activities\\SetupIntegration\\Salesforce\\SetupSalesforceIntegrationCommand::class,\n UpdateOldTranscriptionModelLocalesCommand::class,\n Commands\\Dev\\FixMissMatchedCrmActivitiesCommand::class,\n DownloadMissingTrackCommand::class,\n ActivitiesMatchCrmCommand::class,\n DeleteEmailDocumentsCommand::class,\n DeleteOldTranscriptionsCommand::class,\n DeleteS3LeftoversCommand::class,\n RemoveDeleteMarkersCommand::class,\n SyncTeamUsersCommand::class,\n ReassignTranscriptCommand::class,\n DiarizeViaAiParticipantIdentificationCommand::class,\n RestoreActivityTypeCommand::class,\n DeleteOldAiCrmNotesCommand::class,\n DeleteReportCommand::class,\n AutomatedReportsRetentionPolicyCommand::class,\n SyncHubspotActiveDeals::class,\n GenerateInternalWebhookToken::class,\n IssueMcpTokenCommand::class,\n RestoreActivityCrmProviderIdCommand::class,\n CleanupActivityTracksCommand::class,\n DeleteUnusedTracksCommand::class,\n RestoreTracksCommand::class,\n HubspotWebhookServiceCommand::class,\n ProcessMergedObjectsCommand::class,\n HubspotJournalPollingCommand::class,\n SetupJournalDealWebhookSubscriptionsCommand::class,\n ListJournalWebhookSubscriptionsCommand::class,\n RemoveGhostParticipantsCommand::class,\n AutodetectAiActivityTypeCommand::class,\n Commands\\Crm\\LogActivitiesCommand::class,\n Commands\\Crm\\MatchOpportunityActivitiesCommand::class,\n PurgeDeletedOpportunitiesCommand::class,\n CleanDuplicateFieldDataCommand::class,\n RetryProspectSummaryCommand::class,\n ProcessHubspotObjectsSyncBatches::class,\n SyncOpportunitiesMissingFieldDataCommand::class,\n RestoreDealAssociationsCommand::class,\n ];\n\n private Schedule $schedule;\n private string $output;\n\n protected function schedule(Schedule $schedule): void\n {\n $this->schedule = $schedule;\n $this->output = config('jiminny.scheduler_log');\n\n $schedule->useCache('redis');\n\n $currentMinute = (int) date('i');\n $currentDay = (int) date('w');\n\n $this->scheduleEveryMinute();\n $this->scheduleEveryTwoMinutes();\n $this->scheduleEveryFiveMinutes();\n $this->scheduleEveryTenMinutes();\n $this->scheduleEveryFifteenMinutes();\n $this->scheduleEveryThirtyMinutes();\n $this->scheduleHourly();\n $this->scheduleDaily();\n $this->scheduleWeekly($currentDay);\n $this->scheduleSpecificTimes();\n $this->scheduleDynamic($currentMinute);\n }\n\n protected function scheduleEveryMinute(): void\n {\n $this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();\n $this->scheduleCommand('dialers:monitor-activities')->everyMinute();\n $this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();\n $this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();\n\n $this->schedule->command('mailbox:batch:process', ['--max-batches=15'])\n ->everyMinute()\n ->sendOutputTo($this->output);\n }\n\n protected function scheduleEveryTwoMinutes(): void\n {\n $this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();\n }\n\n protected function scheduleEveryFiveMinutes(): void\n {\n $this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();\n // Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)\n $this->scheduleCommand('crm:sync-hubspot-objects', [], 4)\n ->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');\n $this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();\n $this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();\n $this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();\n\n $this->schedule->command('mailbox:batch:create')\n ->cron('2-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output);\n\n $this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])\n ->cron('3-59/5 * * * *')\n ->withoutOverlapping(180)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ->runInBackground();\n\n $this->schedule->command('hubspot:journal-poll', ['--start'])\n ->everyFiveMinutes()\n ->sendOutputTo($this->output)\n ->runInBackground();\n }\n\n protected function scheduleEveryTenMinutes(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();\n $this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');\n $this->scheduleCommand('crm:reset-governor')->everyTenMinutes();\n }\n\n protected function scheduleEveryFifteenMinutes(): void\n {\n $this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();\n $this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');\n $this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');\n $this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n ],\n ])->everyFifteenMinutes();\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_RINGCENTRAL,\n Activity::PROVIDER_AVAYA,\n Activity::PROVIDER_TELUS,\n Activity::PROVIDER_TALKDESK,\n '--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->cron('7,22,37,52 * * * *');\n }\n\n protected function scheduleEveryThirtyMinutes(): void\n {\n $this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');\n $this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();\n\n $this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)\n ->between('02:58', '05:29')\n ->everyThirtyMinutes()\n ->runInBackground();\n\n $this->scheduleActivitiesHardDelete();\n }\n\n protected function scheduleHourly(): void\n {\n $this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();\n $this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');\n $this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');\n $this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');\n $this->scheduleCommand('automated-reports:send')->hourly();\n $this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);\n $this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);\n }\n\n protected function scheduleDaily(): void\n {\n $this->scheduleCommand('teams:sync-planhat')->daily();\n $this->scheduleCommand('twilio:sync-addresses')->daily();\n $this->scheduleCommand('twilio:sync-zone-access')->daily();\n $this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();\n $this->scheduleCommand('users:sync-licence-data')->daily();\n $this->scheduleCommand('users:sync-intercom-data')->daily();\n $this->scheduleCommand('nudges:send-expiration-warnings')->daily();\n $this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();\n }\n\n protected function scheduleWeekly(int $currentDay): void\n {\n if ($currentDay === 0) {\n $this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);\n }\n\n if ($currentDay === 6) {\n $this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_AMAZON_CONNECT,\n '--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->saturdays()->at('01:00')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)\n ->saturdays()->at('01:07')->runInBackground();\n $this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)\n ->saturdays()->at('05:08')->runInBackground();\n $this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')\n ->weeklyOn(6, '6:00');\n $this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')\n ->weeklyOn(6, '7:00');\n }\n }\n\n protected function scheduleSpecificTimes(): void\n {\n $this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_DISCARDED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:20')->runInBackground();\n\n $this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [\n '--status' => InboxEmail::STATUS_PROCESSED,\n '--to' => now()->subWeeks(2)->format('Y-m-d'),\n ])->saturdays()->at('00:30')->runInBackground();\n\n $this->scheduleCommand('automated-reports')->dailyAt('01:00');\n $this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');\n $this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');\n $this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');\n $this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');\n $this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');\n $this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');\n\n $this->scheduleCommand('activity:sync', [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('03:05');\n\n\n $this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');\n $this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');\n $this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');\n $this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');\n $this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');\n\n if (! $this->app->environment('production')) {\n $this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)\n ->dailyAt('04:02')->runInBackground();\n }\n\n $this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');\n\n $this->scheduleCommand('activity:sync', [\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--skipProviders' => [\n Activity::PROVIDER_VONAGE,\n Activity::PROVIDER_FIVE_NINE,\n ],\n ])->dailyAt('05:05');\n\n if (! $this->app->environment('qa')) {\n $this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');\n }\n\n $this->scheduleCommand('activity:sync-dispositions', [\n Activity::PROVIDER_HUBSPOT,\n '--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->dailyAt('07:05');\n }\n\n protected function scheduleDynamic(int $currentMinute): void\n {\n $this->scheduleHourlyFallbackActivitySyncs($currentMinute);\n $this->scheduleBullhornHeartbeat($currentMinute);\n }\n\n private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void\n {\n if ($offsetMinute === 0) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);\n } elseif ($offsetMinute === 1) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);\n } elseif ($offsetMinute === 2) {\n $this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);\n }\n }\n\n private function scheduleBullhornHeartbeat(int $currentMinute): void\n {\n $bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);\n if ($bhHeartbeatInterval > 0) {\n $minutes = max((int) floor($bhHeartbeatInterval / 60), 1);\n if ($currentMinute % $minutes === 0) {\n $bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);\n if ($minutes > 30) {\n $bhEvent->hourly();\n } else {\n $bhEvent->cron(sprintf('*/%d * * * *', $minutes));\n }\n }\n }\n }\n\n private function scheduleActivitiesHardDelete(): void\n {\n if (config(key: 'jiminny.deploy_region') === 'eu') {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 1000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n } elseif ($this->app->environment('production')) {\n $this->scheduleCommand(\n name: 'activities:hard-delete',\n options: ['--limit' => 2000, '--jobs' => 20],\n expiresAt: 29\n )\n ->between('02:59', '07:02')->everyThirtyMinutes()\n ->runInBackground();\n }\n }\n\n private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void\n {\n $this->scheduleCommand('activity:sync', [\n $provider,\n '--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n '--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),\n ])->hourlyAt($offsetMinute);\n }\n\n /**\n * Register the Closure based commands for the application.\n */\n protected function commands(): void\n {\n require_once base_path('routes/console.php');\n }\n\n private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event\n {\n return $this->schedule\n ->command($name, $options)\n ->withoutOverlapping($expiresAt)\n ->onOneServer()\n ->sendOutputTo($this->output)\n ;\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,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-3081584910655193908
|
-8721363744830697783
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20613-allow-owner-role Project: faVsco.js, menu
JY-20613-allow-owner-role-on-team-setup, menu
Start Listening for PHP Debug Connections
UserInvitationDTOTest
Run 'UserInvitationDTOTest'
Debug 'UserInvitationDTOTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Tests\Feature\DTO;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Jiminny\DTO\Invitation\UserInvitationDTO;
use Jiminny\Http\Requests\Settings\Teams\CreateTeamRequest;
use Jiminny\Models\Invitation;
use Jiminny\Models\Role;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Tests\TestCase;
final class UserInvitationDTOTest extends TestCase
{
use DatabaseTransactions;
public function testCreateFromInvitation(): void
{
/** @var Invitation $invitation */
$invitation = Invitation::factory()->create([
'email' => '[EMAIL]',
'group_id' => '1',
'team_id' => '1',
'role_id' => null,
'crm_required' => 1,
'is_owner' => 0,
]);
/** @var User $user */
$user = User::factory()->create();
/** @var Role $userRole */
$userRole = Role::whereName(User::ROLE_RECORDER)->first();
$invitation->roles()->sync($userRole);
$dto = UserInvitationDTO::fromInvitation($invitation, $user);
self::assertSame('[EMAIL]', $dto->email);
self::assertSame(1, $dto->groupId);
self::assertSame(1, $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$userRole->getId()], $dto->roleIds);
self::assertSame($user, $dto->currentUser);
}
public function testForOwner(): void
{
/** @var Team $team */
$team = Team::factory()->create();
$request = new CreateTeamRequest([
'owner_email' => '[EMAIL]',
]);
/** @var User $currentUser */
$currentUser = User::factory()->create();
$request->setUserResolver(static fn () => $currentUser);
$dto = UserInvitationDTO::forOwner($request, $team);
/** @var Role $recorderRole */
$recorderRole = Role::whereName(User::ROLE_RECORDER)->first();
/** @var Role $adminRole */
$adminRole = Role::whereName(User::ROLE_ADMIN)->first();
self::assertSame('[EMAIL]', $dto->email);
self::assertNull($dto->groupId);
self::assertSame($team->getId(), $dto->teamId);
self::assertTrue($dto->crmRequired);
self::assertSame([$adminRole->getId(), $recorderRole->getId()], $dto->roleIds);
self::assertSame($currentUser, $dto->currentUser);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
6
17
Previous Highlighted Error
Next Highlighted Error
<?php
namespace Jiminny\Console;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Jiminny\Component\Acl\RemoveExpiredRoleChangeEventsCommand;
use Jiminny\Component\ActionItems\Commands\SendActionItemsCommand;
use Jiminny\Component\AiActivityType\Commands\AutodetectAiActivityTypeCommand;
use Jiminny\Component\AskJiminnyAi\Commands\ProphetAnalyzeClosedDealsCommand;
use Jiminny\Component\Cache\Constants;
use Jiminny\Component\DealInsights\Commands\SendDealsUpdateCommand;
use Jiminny\Component\MediaPipeline\Command\MediaPipelineRestartCommand;
use Jiminny\Component\MediaPipeline\Command\ReportActivityProcessingTimeToDatadogCommand;
use Jiminny\Component\MediaPipeline\Command\ReportProcessingStatesToDatadogCommand;
use Jiminny\Component\Transcription\Commands\OverrideTranscriptionLocaleCommand;
use Jiminny\Component\Transcription\Commands\RetryFailedTranscriptionsCommand;
use Jiminny\Component\Transcription\Commands\RetryStuckTranscriptionsCommand;
use Jiminny\Console\Commands\Activities\ActivitiesMatchCrmCommand;
use Jiminny\Console\Commands\Activities\AutologOldActivitiesCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\DeleteActivitiesForRetentionTeamsCommand;
use Jiminny\Console\Commands\Activities\DownloadMissingTrackCommand;
use Jiminny\Console\Commands\Activities\FixActivitiesOpportunity;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesForChurnedTeamsCommand;
use Jiminny\Console\Commands\Activities\HardDeleteActivitiesTeamsCommand;
use Jiminny\Console\Commands\Activities\ReassignTranscriptCommand;
use Jiminny\Console\Commands\Activities\ReindexRecentActivitiesCommand;
use Jiminny\Console\Commands\Activities\RetryProspectSummaryCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeleteCancelledCommand;
use Jiminny\Console\Commands\Calendars\Events\CalendarEventDeletePastCommand;
use Jiminny\Console\Commands\Crm\BackfillOpportunityUserFromAccountCommand;
use Jiminny\Console\Commands\Crm\CleanDuplicateFieldDataCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ProcessMergedObjectsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\RestoreDealAssociationsCommand;
use Jiminny\Console\Commands\Crm\ProcessHubspotObjectsSyncBatches;
use Jiminny\Console\Commands\Crm\PurgeDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\Crm\Hubspot\ListJournalWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\Hubspot\SetupJournalDealWebhookSubscriptionsCommand;
use Jiminny\Console\Commands\Crm\SyncHubspotActiveDeals;
use Jiminny\Console\Commands\Crm\SyncOpportunitiesMissingFieldDataCommand;
use Jiminny\Console\Commands\DeleteOldAiCrmNotesCommand;
use Jiminny\Console\Commands\DeleteS3LeftoversCommand;
use Jiminny\Console\Commands\DiarizeViaAiParticipantIdentificationCommand;
use Jiminny\Console\Commands\Elasticsearch\DeleteEmailDocumentsCommand;
use Jiminny\Console\Commands\Elasticsearch\RemoveGhostParticipantsCommand;
use Jiminny\Console\Commands\FlushRolesPermissionsCache;
use Jiminny\Console\Commands\GenerateInternalWebhookToken;
use Jiminny\Console\Commands\IssueMcpTokenCommand;
use Jiminny\Console\Commands\HubspotJournalPollingCommand;
use Jiminny\Console\Commands\HubspotWebhookServiceCommand;
use Jiminny\Console\Commands\Livestream\StopHangingLivestreamsCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteEmailMessagesWithoutActivityCommand;
use Jiminny\Console\Commands\Mailboxes\DeleteInboxEmailsCommand;
use Jiminny\Console\Commands\PurgeSoftDeletedOpportunitiesCommand;
use Jiminny\Console\Commands\PurgeSyncBatchesCommand;
use Jiminny\Console\Commands\RemoveDeleteMarkersCommand;
use Jiminny\Console\Commands\RemoveExpiredNudgesCommand;
use Jiminny\Console\Commands\RemoveUnusedParticipantSpeechesCommand;
use Jiminny\Console\Commands\Reports\AutomatedReportsRetentionPolicyCommand;
use Jiminny\Console\Commands\Reports\DeleteReportCommand;
use Jiminny\Console\Commands\RestoreActivityCrmProviderIdCommand;
use Jiminny\Console\Commands\RestoreActivityTypeCommand;
use Jiminny\Console\Commands\SendNudgeExpirationWarningsCommand;
use Jiminny\Console\Commands\Slack\SyncSlackUserCommand;
use Jiminny\Console\Commands\Teams\SyncTeamUsersCommand;
use Jiminny\Console\Commands\Teams\TeamDeleteCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteDeactivatedCommand;
use Jiminny\Console\Commands\Teams\TeamsDeleteRetentionCommand;
use Jiminny\Console\Commands\Teams\TeamSettingPutCommand;
use Jiminny\Console\Commands\Teams\UpdateTeamsCommand;
use Jiminny\Console\Commands\Tracks\CleanupActivityTracksCommand;
use Jiminny\Console\Commands\Tracks\DeleteUnusedTracksCommand;
use Jiminny\Console\Commands\Tracks\RestoreTracksCommand;
use Jiminny\Console\Commands\Transcription\DeleteOldTranscriptionsCommand;
use Jiminny\Console\Commands\Transcription\UpdateOldTranscriptionModelLocalesCommand;
use Jiminny\Console\Commands\Twilio\DeleteChurnedSubAccounts;
use Jiminny\Console\Commands\Twilio\DeletePredefinedSubAccounts;
use Jiminny\Console\Commands\Twilio\ReleaseNumbersCommand;
use Jiminny\Jobs\Activity\SyncActivity;
use Jiminny\Models\Activity;
use Jiminny\Models\InboxEmail;
use Jiminny\Services\RecallAI\Commands\ImportRegionMeetingCommand;
use Jiminny\Services\RecallAI\Commands\ScheduleBotCommand;
class Kernel extends ConsoleKernel
{
use ConfirmableTrait;
/**
* The Artisan commands provided by your application.
*
* @var string[]
*/
protected $commands = [
Commands\GeckoExport\GeckoExportTranscriptCommand::class,
Commands\GeckoExport\GeckoExportTranscriptionCommand::class,
Commands\GeckoExport\GeckoExportParticipantSpeechesCommand::class,
Commands\Activities\DeleteForCoachesCommand::class,
ReindexRecentActivitiesCommand::class,
Commands\Crm\BullhornPingCommand::class,
Commands\Crm\BullhornSessionCommand::class,
Commands\Crm\BullhornSearchCommand::class,
Commands\PlaybackThemes\TopicsConsolidateCommand::class,
Commands\PlaybackThemes\PlaybackThemesCopyCommand::class,
Commands\PlaybackThemes\AssignTopicsUsedBySingleTeamCommand::class,
Commands\PlaybackThemes\PlaybackThemesMigrateToVersionsCommand::class,
Commands\Vocabulary\VocabularyCopyCommand::class,
Commands\Transcription\TranscriptionPrintRaw::class,
Commands\Migrate\JiminnyMigratePopulateActivitySourceCommand::class,
Commands\EngagementStats\JiminnyEngagementStatsExplainCommand::class,
Commands\EngagementStatsRegenerateCommand::class,
Commands\Analytics\NumberOfActivitiesPerActivityTypeCommand::class,
Commands\Elasticsearch\MappingRunCommand::class,
Commands\Elasticsearch\MappingInstallCommand::class,
Commands\Elasticsearch\UpdateEsMappingSettingsCommand::class,
Commands\Analytics\TranscriptionWordMatchCommand::class,
Commands\JiminnyCacheClearCommand::class,
Commands\Transcription\TranscriptionSearchCommand::class,
RetryStuckTranscriptionsCommand::class,
RetryFailedTranscriptionsCommand::class,
Commands\JiminnyDebugCommand::class,
Commands\RunAiCallScoringForUntypedActivitiesCommand::class,
Commands\Calendars\SyncCalendars::class,
Commands\Calendars\SyncDeletedEvents::class,
Commands\Twilio\FetchMetrics::class,
Commands\Twilio\FetchEvents::class,
Commands\Twilio\FetchSummary::class,
Commands\Twilio\SyncZoneAccess::class,
Commands\DatabaseTableCount::class,
Commands\PurgeConferences::class,
Commands\ResetElasticSearch::class,
Commands\CreateDatabaseUsers::class,
Commands\Activities\NotifyNotLogged::class,
Commands\Crm\SyncTeamMetadata::class,
Commands\Crm\SyncProfileMetadata::class,
Commands\Crm\SyncContact::class,
Commands\Crm\SyncObjects::class,
Commands\Crm\SyncHubspotObjects::class,
Commands\Crm\SyncAccount::class,
Commands\Crm\ResetGovernorLimits::class,
Commands\Crm\ManageSyncStrategyCommand::class,
Commands\ImportRecording::class,
Commands\TrackImported::class,
Commands\Twilio\RecoverTwilioTracksCommand::class,
Commands\Crm\SetupLayouts::class,
Commands\Tracks\SyncTwilioTracks::class,
Commands\Activities\StatusCount::class,
Commands\Mailboxes\TextRelay\WatchMailboxEvents::class,
Commands\Mailboxes\InboxCreate::class,
Commands\Mailboxes\InboxSync::class,
Commands\Mailboxes\BatchCreate::class,
Commands\Mailboxes\BatchProcess::class,
Commands\Mailboxes\InboxPurge::class,
Commands\Mailboxes\BatchRetryFailed::class,
Commands\Mailboxes\BatchFailStalled::class,
Commands\Mailboxes\SkipListsRefresh::class,
Commands\Mailboxes\SkipListsDump::class,
Commands\Mailboxes\TextRelay\SyncMailbox::class,
Commands\Mailboxes\DeleteInboxEmailsCommand::class,
Commands\Mailboxes\DeleteEmailMessagesCommand::class,
DeleteEmailMessagesWithoutActivityCommand::class,
Commands\Tracks\CheckIntegrity::class,
Commands\Twilio\RemoteLifecycle::class,
Commands\Twilio\SyncNumbers::class,
Commands\Crm\SetupActivityTypeForFollowUp::class,
Commands\Activities\CheckPlayable::class,
Commands\Activities\ActivityDeleteCommand::class,
Commands\Activities\Copy::class,
Commands\Activities\ActivityHardDeleteCommand::class,
Commands\Reports\Team::class,
Commands\Reports\GenerateMarketingReport::class,
Commands\Reports\AutomatedReportsCommand::class,
Commands\Reports\AutomatedReportsSendCommand::class,
Commands\MuteOrganizerChannel::class,
Commands\Tracks\DeleteTracks::class,
Commands\Tracks\RetryDownload::class,
Commands\Tracks\RetryFailedDownloads::class,
Commands\Twilio\SyncAddresses::class,
Commands\Activities\UpdateElasticSearch::class,
Commands\MakeSlackLiveCoachingChatNotesOn::class,
Commands\Activities\PreMeetingNotification::class,
ScheduleBotCommand::class,
ImportRegionMeetingCommand::class,
Commands\Activities\MonitorMeetingCountCommand::class,
Commands\Activities\MonitorMeetingStartCommand::class,
Commands\Activities\MonitorMeetingEndCommand::class,
Commands\SyncActivity::class,
Commands\PhpApm::class,
Commands\Crm\SyncOpportunity::class,
Commands\Crm\SyncLead::class,
Commands\Users\SyncLicenceDataToSalesforce::class,
Commands\Crm\UpdateOpportunitySpecifications::class,
Commands\Users\SyncToIntercom::class,
Commands\Users\SyncToUserPilot::class,
Commands\Teams\SyncToPlanhat::class,
Commands\Twilio\SetZoneAccess::class,
Commands\Users\CreateDefaultSavedSearchesCommand::class,
Commands\Crm\SendNotLogged::class,
Commands\Teams\DeactivateTeamCommand::class,
Commands\Crm\SyncFieldMetadata::class,
Commands\Postmark\SyncEmailTemplatesCommand::class,
Commands\PlaybackThemes\ImportTriggersFromTranslatedCsvCommand::class,
Commands\Activities\PreMeetingReminder::class,
Commands\Activities\CustomerActivitiesExport::class,
Commands\Users\RefreshAccessToken::class,
Commands\Calendars\SetupCalendarSubscription::class,
Commands\Activities\InviteMeetingBot::class,
Commands\Activities\ChangeActivitiesPlaybookCategoryOnPlaybookChange::class,
Commands\Crm\MigrateProvider::class,
Commands\Activities\MigrateLocationFromCalendarEventToActivities::class,
Commands\HelperTruncateCoachingTables::class,
Commands\FixCrossTenantIssues::class,
Commands\Activities\CloudCall\SetupIntegration::class,
Commands\Activities\CloudTalk\FixTimeZone::class,
Commands\Activities\Orum\SetupIntegration::class,
Commands\Activities\JustCall\SetupIntegration::class,
Commands\Activities\RingCentral\AddInboundPromptSupport::class,
Commands\Dialers\Dialpad\SubscribeToWebhooks::class,
Commands\RecalculateDealRisksCommand::class,
SendDealsUpdateCommand::class,
Commands\Activities\SetProviderCapabilitiesField::class,
Commands\Teams\InitiallySetNotificationProviderTeamsTable::class,
Commands\Crm\AddLayoutEntities::class,
Commands\PropagateCoachingFeedbackCreatedAtToSectionFeedbacks::class,
Commands\JiminnyTokenInfoCommand::class,
Commands\JiminnySetEncryptedTokenManagerModeCommand::class,
Commands\EncryptTokensCommand::class,
Commands\Dialers\Aircall\CheckAndRenewWebhooks::class,
Commands\Migrate\MigrateTeamRegionCommand::class,
Commands\ManageScimForTeam::class,
Commands\Dialers\SyncUsersCommand::class,
Commands\WhichWorkerIsWorkingOnWhichJob::class,
Commands\GroupSetDefaultLanguageCommand::class,
Commands\Dev\AddRateLimitCommand::class,
Commands\Dev\ImportCallsCommand::class,
Commands\DealInsights\BuildDealInsightsLayoutCommand::class,
Commands\DealInsights\DeleteAskJiminnyDealPrompts::class,
Commands\Crm\MatchCrmObjectsCommand::class,
Commands\Activities\SetupIntegration\EightByEight::class,
Commands\Calendars\RemoveCalendarEventActivitiesCommand::class,
Commands\Activities\Migrator\MigrateFromGongCommand::class,
Commands\Activities\Migrator\MigrateFromChorusCommand::class,
Commands\Activities\Migrator\MigrateFromLeexiCommand::class,
Commands\Activities\Migrator\MigrateFromAvomaCommand::class,
Commands\Activities\Migrator\MigrateFromClariCommand::class,
Commands\Activities\SetupIntegration\ConnectAndSell::class,
Commands\Activities\SetupIntegration\CloudTalk::class,
Commands\Users\CreateConferenceSlug::class,
Commands\Elasticsearch\AsyncUpdateEsEntities::class,
Commands\Elasticsearch\ResetAsyncElasticSearchCommand::class,
Commands\Playlists\PlaylistSharesUpdateCommand::class,
Commands\Crm\AutologDelayedCommand::class,
Commands\Activities\HydrateDefaultActivityTypeCommand::class,
Commands\Crm\CheckActivityLoggableCommand::class,
Commands\Activities\MonitorDialerActivitiesCommand::class,
Commands\Activities\SetupIntegration\Xant::class,
Commands\ImportUsersFromCsvFile::class,
Commands\DevPostmanCommand::class,
Commands\Playlists\FixTreeStructureCommand::class,
Commands\Zoom\ResolvePmiLinksCommand::class,
Commands\MarkBranchForEnvironmentPipelineCommand::class,
Commands\Activities\ProbeMediaSegmentsCommand::class,
Commands\Activities\SetupIntegration\AmazonConnect::class,
Commands\Playbooks\ChangePlaybookActivityFieldCommand::class,
MediaPipelineRestartCommand::class,
Commands\Dev\FixHubSpotTokens::class,
Commands\Dev\MonitorSocialAccountsState::class,
Commands\Activities\SetupIntegration\Vonage::class,
Commands\Activities\SetupIntegration\TwilioFlex::class,
Commands\Activities\SetupIntegration\TwilioFlexDirect::class,
Commands\Activities\SetupIntegration\TwilioFlexSetDialerAuthCredentialsCommand::class,
Commands\Activities\SetupIntegration\TwilioSetS3RecordingCredentialsCommand::class,
SendActionItemsCommand::class,
Commands\Users\ChangeEmail::class,
Commands\Calendars\ListUserGoogleCalendars::class,
Commands\Activities\JustCall\SyncPlaybackLinkToCrmCommand::class,
Commands\Activities\HydrateCallWithCrmDataCommand::class,
Commands\Activities\UpdateActivityElasticSearchDocumentCommand::class,
Commands\Activities\SetupIntegration\Talkdesk::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookRegisterCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookListCommand::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookShow::class,
Commands\Transcription\Microsoft\TranscriptionProviderMicrosoftWebhookDeleteCommand::class,
Commands\Activities\SetupIntegration\TwilioVideo::class,
Commands\Crm\SetupCloseCrm::class,
Commands\Crm\SetupCopperCrm::class,
Commands\Crm\FullSyncOpportunityCommand::class,
Commands\Crm\IntegrationApp\CrmEntitiesFullSyncCommand::class,
Commands\Crm\IntegrationApp\ValidateConnectionCommand::class,
Commands\Activities\Workflow\RefreshCrmData::class,
Commands\Activities\Migrator\AnalyseGongCalls::class,
Commands\Users\AddVoiceRoleToRecorderCommand::class,
Commands\Activities\SyncMissingCallDispositions::class,
Commands\Calendars\RemoveFutureCalendarEvents::class,
FlushRolesPermissionsCache::class,
Commands\Activities\SetupIntegration\FiveNine::class,
CalendarEventDeleteCancelledCommand::class,
CalendarEventDeletePastCommand::class,
ReportActivityProcessingTimeToDatadogCommand::class,
ReportProcessingStatesToDatadogCommand::class,
ReleaseNumbersCommand::class,
BackfillOpportunityUserFromAccountCommand::class,
RemoveExpiredRoleChangeEventsCommand::class,
RemoveExpiredNudgesCommand::class,
SendNudgeExpirationWarningsCommand::class,
AutologOldActivitiesCommand::class,
RemoveUnusedParticipantSpeechesCommand::class,
DeleteActivitiesForChurnedTeamsCommand::class,
HardDeleteActivitiesForChurnedTeamsCommand::class,
TeamDeleteCommand::class,
TeamsDeleteDeactivatedCommand::class,
UpdateTeamsCommand::class,
OverrideTranscriptionLocaleCommand::class,
SyncSlackUserCommand::class,
PurgeSoftDeletedOpportunitiesCommand::class,
PurgeSyncBatchesCommand::class,
ProphetAnalyzeClosedDealsCommand::class,
DeleteChurnedSubAccounts::class,
Commands\ProphetAi\DumpContext::class,
DeletePredefinedSubAccounts::class,
DeleteActivitiesForRetentionTeamsCommand::class,
HardDeleteActivitiesTeamsCommand::class,
TeamsDeleteRetentionCommand::class,
TeamSettingPutCommand::class,
StopHangingLivestreamsCommand::class,
FixActivitiesOpportunity::class,
Commands\Activities\SetupIntegration\Salesforce\SetupSalesforceIntegrationCommand::class,
UpdateOldTranscriptionModelLocalesCommand::class,
Commands\Dev\FixMissMatchedCrmActivitiesCommand::class,
DownloadMissingTrackCommand::class,
ActivitiesMatchCrmCommand::class,
DeleteEmailDocumentsCommand::class,
DeleteOldTranscriptionsCommand::class,
DeleteS3LeftoversCommand::class,
RemoveDeleteMarkersCommand::class,
SyncTeamUsersCommand::class,
ReassignTranscriptCommand::class,
DiarizeViaAiParticipantIdentificationCommand::class,
RestoreActivityTypeCommand::class,
DeleteOldAiCrmNotesCommand::class,
DeleteReportCommand::class,
AutomatedReportsRetentionPolicyCommand::class,
SyncHubspotActiveDeals::class,
GenerateInternalWebhookToken::class,
IssueMcpTokenCommand::class,
RestoreActivityCrmProviderIdCommand::class,
CleanupActivityTracksCommand::class,
DeleteUnusedTracksCommand::class,
RestoreTracksCommand::class,
HubspotWebhookServiceCommand::class,
ProcessMergedObjectsCommand::class,
HubspotJournalPollingCommand::class,
SetupJournalDealWebhookSubscriptionsCommand::class,
ListJournalWebhookSubscriptionsCommand::class,
RemoveGhostParticipantsCommand::class,
AutodetectAiActivityTypeCommand::class,
Commands\Crm\LogActivitiesCommand::class,
Commands\Crm\MatchOpportunityActivitiesCommand::class,
PurgeDeletedOpportunitiesCommand::class,
CleanDuplicateFieldDataCommand::class,
RetryProspectSummaryCommand::class,
ProcessHubspotObjectsSyncBatches::class,
SyncOpportunitiesMissingFieldDataCommand::class,
RestoreDealAssociationsCommand::class,
];
private Schedule $schedule;
private string $output;
protected function schedule(Schedule $schedule): void
{
$this->schedule = $schedule;
$this->output = config('jiminny.scheduler_log');
$schedule->useCache('redis');
$currentMinute = (int) date('i');
$currentDay = (int) date('w');
$this->scheduleEveryMinute();
$this->scheduleEveryTwoMinutes();
$this->scheduleEveryFiveMinutes();
$this->scheduleEveryTenMinutes();
$this->scheduleEveryFifteenMinutes();
$this->scheduleEveryThirtyMinutes();
$this->scheduleHourly();
$this->scheduleDaily();
$this->scheduleWeekly($currentDay);
$this->scheduleSpecificTimes();
$this->scheduleDynamic($currentMinute);
}
protected function scheduleEveryMinute(): void
{
$this->scheduleCommand('meeting-bot:schedule-bot', expiresAt: 1)->everyMinute();
$this->scheduleCommand('dialers:monitor-activities')->everyMinute();
$this->scheduleCommand('jiminny:monitor-social-accounts')->everyMinute();
$this->scheduleCommand('mailbox:skip-lists:refresh')->everyMinute();
$this->schedule->command('mailbox:batch:process', ['--max-batches=15'])
->everyMinute()
->sendOutputTo($this->output);
}
protected function scheduleEveryTwoMinutes(): void
{
$this->scheduleCommand('conference:monitor:count', [], 2)->everyTwoMinutes();
}
protected function scheduleEveryFiveMinutes(): void
{
$this->scheduleCommand('activity:purge-stale', [], 4)->everyFiveMinutes();
// Offset by 1 minute to avoid overlap with crm:sync-objects (runs at :14 and :44)
$this->scheduleCommand('crm:sync-hubspot-objects', [], 4)
->cron('1,6,11,16,21,26,31,36,41,46,51,56 * * * *');
$this->scheduleCommand('mailbox:text-relay:sync')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-notification', [], 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:start', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('conference:monitor:end', expiresAt: 3)->everyFiveMinutes();
$this->scheduleCommand('jiminny:fix-hubspot-tokens')->everyFiveMinutes();
$this->scheduleCommand('conference:pre-meeting-reminder')->everyFiveMinutes()->runInBackground();
$this->schedule->command('mailbox:batch:create')
->cron('2-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output);
$this->schedule->command('mailbox:batch:retry-failed', ['--max-batches=15'])
->cron('3-59/5 * * * *')
->withoutOverlapping(180)
->onOneServer()
->sendOutputTo($this->output)
->runInBackground();
$this->schedule->command('hubspot:journal-poll', ['--start'])
->everyFiveMinutes()
->sendOutputTo($this->output)
->runInBackground();
}
protected function scheduleEveryTenMinutes(): void
{
$this->scheduleCommand('jiminny:transcription:retry-failed')->everyTenMinutes();
$this->scheduleCommand('activity:notify-not-logged')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('activity:status-count')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('mailbox:sync')->cron('6,16,26,36,46,56 * * * *');
$this->scheduleCommand('crm:reset-governor')->everyTenMinutes();
}
protected function scheduleEveryFifteenMinutes(): void
{
$this->scheduleCommand('datadog:report:processing-sla-activities')->everyFifteenMinutes();
$this->scheduleCommand('calendar:sync', ['--dateMode=daily'], 14)->cron('13,28,43,58 * * * *');
$this->scheduleCommand('activity:aircall:check-and-renew')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('track:retry-failed-downloads')->cron('9,24,39,54 * * * *');
$this->scheduleCommand('crm:autolog-delayed')->cron('3,18,33,48 * * * *');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
],
])->everyFifteenMinutes();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_RINGCENTRAL,
Activity::PROVIDER_AVAYA,
Activity::PROVIDER_TELUS,
Activity::PROVIDER_TALKDESK,
'--from' => now()->subMinutes(16)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->cron('7,22,37,52 * * * *');
}
protected function scheduleEveryThirtyMinutes(): void
{
$this->scheduleCommand('crm:sync-objects')->cron('14,44 * * * *');
$this->scheduleCommand('mailbox:batch:fail-stalled')->everyThirtyMinutes();
$this->scheduleCommand('activities:delete-activities-for-deactivated-teams', expiresAt: 5)
->between('02:58', '05:29')
->everyThirtyMinutes()
->runInBackground();
$this->scheduleActivitiesHardDelete();
}
protected function scheduleHourly(): void
{
$this->scheduleCommand('jiminny:transcription:retry-stuck')->hourly();
$this->scheduleCommand('twilio:recover-tracks')->cron('22 * * * *');
$this->scheduleCommand('dialers:sync-users')->cron('22 * * * *');
$this->scheduleCommand('datadog:report:failed-processing-states')->cron('22 * * * *');
$this->scheduleCommand('automated-reports:send')->hourly();
$this->scheduleCommand('deal-insights:send-update')->hourlyAt(0);
$this->scheduleCommand('crm:integration-app-validate-team-connection')->hourlyAt(23);
}
protected function scheduleDaily(): void
{
$this->scheduleCommand('teams:sync-planhat')->daily();
$this->scheduleCommand('twilio:sync-addresses')->daily();
$this->scheduleCommand('twilio:sync-zone-access')->daily();
$this->scheduleCommand('mailbox:text-relay:watch-text-events')->daily();
$this->scheduleCommand('users:sync-licence-data')->daily();
$this->scheduleCommand('users:sync-intercom-data')->daily();
$this->scheduleCommand('nudges:send-expiration-warnings')->daily();
$this->scheduleCommand('nudges-data-clean-up', ['--deleteExpiredNudges'])->daily();
}
protected function scheduleWeekly(int $currentDay): void
{
if ($currentDay === 0) {
$this->scheduleCommand('crm:update-opp-specs')->weeklyOn(0);
}
if ($currentDay === 6) {
$this->scheduleCommand('jiminny:acl:remove-expired-role-change-events')->saturdays();
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_AMAZON_CONNECT,
'--from' => now()->subDays(7)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->saturdays()->at('01:00')->runInBackground();
$this->scheduleCommand('calendar:event:delete-past', ['--force'], 60)
->saturdays()->at('01:07')->runInBackground();
$this->scheduleCommand('calendar:event:delete-cancelled', ['--force'], 60 * 47 + 52)
->saturdays()->at('05:08')->runInBackground();
$this->scheduleCommand('nudges-data-clean-up --squashNudgeRuns')
->weeklyOn(6, '6:00');
$this->scheduleCommand('nudges-data-clean-up --pruneOldRuns --retentionDays=35')
->weeklyOn(6, '7:00');
}
}
protected function scheduleSpecificTimes(): void
{
$this->scheduleCommand('deal-risks:calculate', ['--cronjob'])->dailyAt('00:00');
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_DISCARDED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:20')->runInBackground();
$this->scheduleCommand(DeleteInboxEmailsCommand::NAME, [
'--status' => InboxEmail::STATUS_PROCESSED,
'--to' => now()->subWeeks(2)->format('Y-m-d'),
])->saturdays()->at('00:30')->runInBackground();
$this->scheduleCommand('automated-reports')->dailyAt('01:00');
$this->scheduleCommand('crm:sync-team-metadata')->dailyAt('01:05');
$this->scheduleCommand('crm:sync-profile-metadata')->dailyAt('01:05');
$this->scheduleCommand('calendar:sync-deleted-events')->dailyAt('01:10');
$this->scheduleCommand('teams:delete-retention')->dailyAt('02:55');
$this->scheduleCommand('teams:delete-deactivated')->dailyAt('02:58');
$this->scheduleCommand('twilio:remote-lifecycle')->dailyAt('03:00');
$this->scheduleCommand('activity:sync', [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('03:05');
$this->scheduleCommand('activities:delete-retention-teams', expiresAt: 240)->dailyAt('03:04');
$this->scheduleCommand('automated-reports:run-retention-policy', expiresAt: 120)->dailyAt('03:15');
$this->scheduleCommand('stop:hanging:livestreams')->dailyAt('03:30');
$this->scheduleCommand('crm:purge-sync-batches')->dailyAt('03:45');
$this->scheduleCommand('twilio:sync-numbers')->dailyAt('04:00');
if (! $this->app->environment('production')) {
$this->scheduleCommand('activities:hard-delete', ['--limit' => 1000, '--jobs' => 5], 60)
->dailyAt('04:02')->runInBackground();
}
$this->scheduleCommand('crm:full-sync-opportunity')->dailyAt('05:00');
$this->scheduleCommand('activity:sync', [
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--skipProviders' => [
Activity::PROVIDER_VONAGE,
Activity::PROVIDER_FIVE_NINE,
],
])->dailyAt('05:05');
if (! $this->app->environment('qa')) {
$this->scheduleCommand('ai-crm-notes:delete-old')->dailyAt('07:00');
}
$this->scheduleCommand('activity:sync-dispositions', [
Activity::PROVIDER_HUBSPOT,
'--from' => now()->subDay()->startOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->subDay()->endOfDay()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->dailyAt('07:05');
}
protected function scheduleDynamic(int $currentMinute): void
{
$this->scheduleHourlyFallbackActivitySyncs($currentMinute);
$this->scheduleBullhornHeartbeat($currentMinute);
}
private function scheduleHourlyFallbackActivitySyncs(int $offsetMinute): void
{
if ($offsetMinute === 0) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUD_TALK, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_VONAGE, 6, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_CLOUDCALL_US, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_FIVE_NINE, 3, 0);
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_HUBSPOT, 1, 0);
} elseif ($offsetMinute === 1) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_RINGCENTRAL, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 1);
} elseif ($offsetMinute === 2) {
$this->scheduleHourlyFallbackActivitySync(Activity::PROVIDER_AVAYA, Constants::RINGCENTRAL_CALL_LOG_LOOK_BACK_HOURS, 2);
}
}
private function scheduleBullhornHeartbeat(int $currentMinute): void
{
$bhHeartbeatInterval = config('services.bullhorn.heartbeatInterval', 0);
if ($bhHeartbeatInterval > 0) {
$minutes = max((int) floor($bhHeartbeatInterval / 60), 1);
if ($currentMinute % $minutes === 0) {
$bhEvent = $this->scheduleCommand('crm:bullhorn:ping', ['--heartbeat']);
if ($minutes > 30) {
$bhEvent->hourly();
} else {
$bhEvent->cron(sprintf('*/%d * * * *', $minutes));
}
}
}
}
private function scheduleActivitiesHardDelete(): void
{
if (config(key: 'jiminny.deploy_region') === 'eu') {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 1000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
} elseif ($this->app->environment('production')) {
$this->scheduleCommand(
name: 'activities:hard-delete',
options: ['--limit' => 2000, '--jobs' => 20],
expiresAt: 29
)
->between('02:59', '07:02')->everyThirtyMinutes()
->runInBackground();
}
}
private function scheduleHourlyFallbackActivitySync(string $provider, int $hours, int $offsetMinute = 0): void
{
$this->scheduleCommand('activity:sync', [
$provider,
'--from' => now()->subHours($hours)->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
'--to' => now()->startOfMinute()->format(SyncActivity::ALLOWED_DATE_FORMAT),
])->hourlyAt($offsetMinute);
}
/**
* Register the Closure based commands for the application.
*/
protected function commands(): void
{
require_once base_path('routes/console.php');
}
private function scheduleCommand(string $name, array $options = [], $expiresAt = 60 * 3): Event
{
return $this->schedule
->command($name, $options)
->withoutOverlapping($expiresAt)
->onOneServer()
->sendOutputTo($this->output)
;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
51661
|
NULL
|
NULL
|
NULL
|